Tot el que heu de saber sobre el xifratge a Java

Aquest article us proporcionarà un coneixement detallat i exhaustiu del xifratge en Java i de com utilitzar-lo amb exemples.

El xifratge és el mètode d’utilitzar algorismes matemàtics per camuflar el significat d’una informació de manera que només les parts autoritzades puguin desxifrar-la. En aquest article, analitzarem el xifratge i el desxifratge a en l'ordre següent:

Introducció al xifratge a Java

El xifratge s’implementa per protegir les nostres dades (com ara textos, converses i veu), ja sigui asseguts en un ordinador o s’envien a Internet. Les tecnologies de xifratge recents són elements essencials de qualsevol entorn informàtic segur.





javascript comprova la longitud de la matriu

El paper principal de la seguretat del xifratge rau en la capacitat d’un algorisme de generar text xifrat (text xifrat) que és difícil de tornar al seu text clar original. L'ús de claus també crea un altre nivell de seguretat en els mètodes de protecció de la nostra informació. Una clau és una mica d’informació, que només permet codificar i descodificar un missatge a aquells que la mantenen.

Xifratge i desxifratge a Java



Algorismes de xifratge simètric

Els algoritmes simètrics utilitzen la mateixa clau per xifrar i desxifrar. Aquests algoritmes només poden funcionar en mode de bloc (que funciona en blocs de dades de mida fixa) o en mode de flux (que funciona en bits o bytes de dades). Aquests algoritmestambé s’utilitzen habitualment per a aplicacions com el xifratge de dades, xifratge de fitxers i xifratge de dades transmeses a xarxes de comunicació (com TLS, correus electrònics, missatges instantanis, etc.)

Algoritmes de xifratge asimètrics (o de clau pública)

A diferència dels algorismes simètrics, que utilitzen la mateixa clau tant per a les operacions de xifratge com de desxifratge, els algorismes asimètrics utilitzen dues claus idèntiques per a aquests dos passos. Aquests algoritmes s’utilitzen per al càlcul de signatures digitals i protocols d’establiment de claus. Tanmateix, això també comporta un repte que cal utilitzar dues claus, cosa que fa les coses més complexes.



Per configurar qualsevol esquema de xifratge bàsic de forma segura, és molt crucial que tots aquests paràmetres (com a mínim) estiguin dissenyats correctament:

  • És important triar l’algoritme correcte.
  • Triar el mode d’operació adequat per a la tasca adequada
  • Triar l’esquema d’encoixinat adequat segons el requisit
  • Escollint les tecles i les mides adequades en conseqüència
  • Inicialització correcta amb CSPRING criptogràficament segur.

És molt important ser conscients de configurar tots aquests paràmetres de manera segura. Fins i tot una petita configuració errònia pot posar en perill tot un sistema de criptografia i obrir-lo a atacs de pirates informàtics i altres programes maliciosos. Per tant, per simplificar aquesta discussió, discutim només les inicialitzacions d’un xifratge independents de l’algorisme. En lloc de fer aquests xifrats per vosaltres mateixos, sempre és millor deixar que els experts facin la seva tasca de configurar més configuracions dependents de l'algoritme, com ara els valors p i q de l'algorisme RSA, etc. dotzena, s’utilitzen classes.

La introducció de jerarquies de classes, molts constructors / mètodes sobrecarregats, etc., afegint moltes complexitats, que la fan innecessària. M’agradaria que Java no compliqués les configuracions bàsiques i simplement emprés una arquitectura més simplificada com la de Microsoft, on tots aquests paràmetres es troben dins del perímetre d’una sola classe SymmetricAlgorithm i AsymmetricAlgorithm. Per especificar els primers tres paràmetres (algorisme, mode de funcionament i esquema de farciment), un objecte Cipher utilitza una cadena de transformació.

  • Triar l’algorisme adequat

Una cadena de transformació inclou, sens dubte, el nom d'un algorisme criptogràfic. Entre xifratge simètric i asimètric, hi ha 11 algoritmes (que no es refereixen a diverses combinacions PBEWithAnd), que es poden especificar segons la documentació estàndard del nom de l’algorisme. D’ells només dos (un per a cada xifratge simètric i asimètric) estan realment totalment protegits.

La resta d’algoritmes estan excessivament trencats (DES, RC2, etc.) o bé han començat a aparèixer esquerdes (RC5), cosa que fa que es pugui trencar amb la potència de la CPU suficient; És possible que un desenvolupador amb seguretat no llegeixi les especificacions del NIST ni segueixi els darrers esdeveniments i investigacions de la comunitat de criptografia. Poden recollir els algoritmes trencats o arriscats, el resum o el generador pseudo-aleatori.

Sempre per:

  1. Algorisme simètric: s’utilitza el xifratge de blocs AES / AESWrap.

  2. Algorisme asimètric: s’utilitza RSA.

  • Mode de funcionament

El mode d’operació forma part de la transformació i només és rellevant per a bloquejar xifrats. Quan fem servir xifrats asimètrics, utilitzeu el BCE com a mode d’operació, que bàsicament és un pirateig entre bastidors, cosa que significa ignorar aquest valor. Els proveïdors de Java com SunJCE i SunPKCS11 passen per defecte al mode BCE per a algorismes simètrics i asimètrics. Pot ser bo per als algoritmes asimètrics, però una mala idea per als xifrats de blocs.

Els proveïdors podrien rebre instruccions de fer valors predeterminats segurs en funció de l'algorisme utilitzat. Utilitzeu el xifratge simètric per estalviar-vos atacs de reproducció o atacs de text clar conegut. A més, utilitzeu una transformació que especifiqui completament un algorisme (és a dir, amb el seu mode d’operació i farciment). Mai, mai feu alguna cosa com l’esmentada a continuació.

Com es va esmentar anteriorment, l’algorisme AES s’utilitzaria amb el mode d’operació del BCE, cosa que facilita molt la reproducció dels atacs. Per al nou desenvolupament, si hi ha la mínima possibilitat de renovar el treball antic, hauríem d’utilitzar el xifratge autenticat amb el mode de dades associades (AEAD) (per exemple, GCM i CCM). Tenim una etiqueta d’autenticació amb una longitud completa de 128 bits. Si fem servir un mode no autenticat, utilitzarem CBC o CTR amb un MAC per autenticar el text xifrat.

  • Triar l’esquema d’encoixinat adequat

Els modes de xifratge de blocs habituals necessiten que la longitud del text pla sigui múltiple de la mida del bloc de l’algoritme de xifratge subjacent, cosa que rarament passa. Per tant, necessitem una mica de farciment.El programa Java ens proporciona tres esquemes diferents per al xifratge simètric, un és el de No Padding, que és inacceptable, i un altre ISO10126Padding que es retira des del 2007).

Per tant, l’única opció adequada és utilitzar PKCS5Padding. La barreja d'alguns modes d'operació (per exemple, el mode CBC) i l'esquema de farciment PKCS5Padding pot provocar atacs oracle de farciment. No esmentar en absolut un esquema de farciment és més perillós que proporcionar un esquema susceptible només a certs tipus d’atacs. Es recomana el mode de funcionament AEAD per assegurar-vos que esteu protegit contra aquests atacs.

  • Algorismes asimètrics

En algorismes asimètrics, tenim l'opció de triar entre dos esquemes de farciment. És important assegurar-se que només s’utilitzen esquemes OAEPWithAndPadding. En cas de resum, utilitzeu SHA1 o SHA256 / 384/512. Per a la funció de generació de màscares (MGF), utilitzeu el farciment MGF1 tal com s’especifica. PKCS1Padding amb RSA ha estat vulnerable als atacs de text xifrat [6] des de 1998.

Aquí parlem de la manera correcta d’utilitzar una transformació en un mètode “Cipher.getInstance”.

  • Xifratge simètric

  • Xifratge asimètric

Un nivell de seguretat de qualsevol esquema de xifratge és directament proporcional a la mida de la seva clau. La longitud de la clau ha de ser prou llarga perquè qualsevol força bruta que ataqui sigui inviable al mateix temps, també ha de ser prou curta per tenir present la viabilitat computacional. A més, hem de mirar de considerar què encara pot suportar els avenços computacionals durant els propers 30 anys.

Amb això, arribem al final de l'article de xifratge en Java. Espero que tingueu una idea de xifratge i desxifratge i per què s’utilitza a Java.

java és-una relació

Consulteu el per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. El curs de formació i certificació Java J2EE i SOA d’Edureka està dissenyat per a estudiants i professionals que vulguin ser desenvolupador de Java. El curs està dissenyat per donar-vos un avantatge en la programació de Java i formar-vos tant per conceptes bàsics com avançats de Java, juntament amb diversos marcs Java com Hibernate i Spring.

Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris d’aquest bloc “Xifratge a Java” i us respondrem el més aviat possible.