Alles wat u moet weten over codering in Java



Dit artikel geeft u een gedetailleerde en uitgebreide kennis van codering in Java en hoe u deze kunt gebruiken met voorbeelden.

Versleuteling is de methode waarbij wiskundige algoritmen worden gebruikt om de betekenis van een stukje informatie te camoufleren, zodat alleen geautoriseerde partijen het kunnen ontcijferen. In dit artikel bespreken we versleuteling en ontsleuteling in in de volgende volgorde:

Een inleiding tot codering in Java

Versleuteling wordt geïmplementeerd om onze gegevens (zoals teksten, gesprekken en spraak) te beschermen, of deze nu op een computer staan ​​of via internet worden verzonden. Recente coderingstechnologieën zijn essentiële elementen van elke veilige computeromgeving.





De primaire rol van de beveiliging van codering ligt in het vermogen van een algoritme om cijfertekst (gecodeerde tekst) te genereren, die moeilijk terug te brengen is naar de oorspronkelijke platte tekst. Het gebruik van sleutels creëert ook een ander beveiligingsniveau voor methoden om onze informatie te beschermen. Een sleutel is enige informatie, waardoor alleen degenen die de sleutel hebben, een bericht kunnen coderen en decoderen.

hoe je een geheel getal in python omkeert

Versleuteling en ontsleuteling in Java



Symmetrische versleutelingsalgoritmen

De symmetrische algoritmen gebruiken dezelfde sleutel voor codering en decodering. Dergelijke algoritmen kunnen alleen werken in blokmodus (die werkt op blokken met gegevens van een vaste grootte) of stream-modus (die werkt op bits of bytes aan gegevens). Dergelijke algoritmenworden ook vaak gebruikt voor toepassingen zoals gegevenscodering, bestandscodering en codering van verzonden gegevens in communicatienetwerken (zoals TLS, e-mails, instant messages, enz.)

Asymmetrische (of openbare sleutel) versleutelingsalgoritmen

In tegenstelling tot symmetrische algoritmen, die dezelfde sleutel gebruiken voor zowel coderings- als decoderingsbewerkingen, gebruiken de asymmetrische algoritmen twee identieke sleutels voor deze twee stappen. Deze algoritmen worden gebruikt voor het berekenen van digitale handtekeningen en sleutelprotocollen. Dit brengt echter ook een uitdaging met zich mee dat er twee sleutels moeten worden gebruikt, wat de zaken ingewikkelder maakt.



Om een ​​basisversleutelingsschema veilig te configureren, is het erg cruciaal dat al deze parameters (op zijn minst) correct zijn ontworpen:

  • Het kiezen van het juiste algoritme is belangrijk.
  • De juiste bedieningsmodus kiezen voor de juiste taak
  • Het juiste opvulschema kiezen volgens de vereisten
  • De juiste sleutels en hun afmetingen dienovereenkomstig kiezen
  • Correcte initialisatie met cryptografisch beveiligde CSPRING.

Het is erg belangrijk om te weten dat al deze parameters veilig zijn geconfigureerd. Zelfs een kleine misconfiguratie kan een volledig cryptosysteem in gevaar brengen en het openen voor aanvallen van hackers en andere malware. Laten we daarom, om deze discussie eenvoudig te houden, alleen algoritme-onafhankelijke initialisaties van een cijfer bespreken. In plaats van dergelijke coderingen zelf te doen, is het altijd beter om experts hun werk te laten doen door meer algoritme-afhankelijke configuraties te configureren, zoals p- en q-waarden van het RSA-algoritme, enz. Door alleen de rudimentaire cryptografische parameters te configureren boven meer dan een halve dozijn, klassen worden gebruikt.

De introductie van klassenhiërarchieën, veel overbelaste constructors / methoden enzovoort, waardoor veel complexiteiten zijn toegevoegd, waardoor het niet nodig is. Ik wou dat Java de basisconfiguraties niet ingewikkelder maakte en gewoon een meer vereenvoudigde architectuur zou gebruiken zoals die van Microsoft, waar al dergelijke parameters binnen de perimeter van een enkele klasse SymmetricAlgorithm en AsymmetricAlgorithm vallen. Voor de eerste drie parameters die moeten worden gespecificeerd (algoritme, werkingsmodus en opvulschema), gebruikt een Cipher-object een transformatiestring.

  • Het juiste algoritme kiezen

Een transformatiestring bevat ongetwijfeld de naam van een cryptografisch algoritme. Tussen symmetrische en asymmetrische codering zijn er 11 algoritmen (niet met betrekking tot verschillende PBEWithAnd-combinaties), die kunnen worden gespecificeerd volgens de Standard Algorithm Name Documentation. Van hen zijn er slechts twee (één voor elk, symmetrische en asymmetrische coderingen) daadwerkelijk volledig beveiligd.

wat is substring in java

De overige algoritmen zijn ofwel buitensporig gebroken (DES, RC2, etc.) of er beginnen scheuren te verschijnen (RC5), waardoor het breekbaar wordt met voldoende CPU-kracht - het kan al worden verbroken tegen de tijd dat je dit leest. Een op beveiliging gerichte ontwikkelaar leest mogelijk geen grote hoeveelheden NIST-specificaties, noch volgt hij de laatste gebeurtenissen en onderzoeken in de cryptografiegemeenschap. Ze kunnen de kapotte of riskante algoritmen, digest of pseudo-willekeurige generator oppikken.

Altijd voor:

  1. Symmetrisch algoritme: AES / AESWrap-blokcijfer wordt gebruikt.

  2. Asymmetrisch algoritme: RSA wordt gebruikt.

  • Werkwijze

De werkingsmodus maakt deel uit van de transformatie en is alleen relevant voor blokcijfers. Als we asymmetrische cijfers gebruiken, gebruik dan ECB als de werkingsmodus, wat in wezen een hack achter de schermen is, wat betekent dat deze waarde wordt genegeerd. De Java-providers zoals SunJCE, SunPKCS11 gebruiken standaard de ECB-modus voor symmetrische en asymmetrische algoritmen. Het is misschien een goede zaak voor asymmetrische algoritmen, maar een slecht idee voor blokcijfers.

De providers kunnen worden geïnstrueerd om veilige standaardinstellingen te maken op basis van het gebruikte algoritme. Gebruik symmetrische versleuteling om u te beschermen tegen herhalingsaanvallen of aanvallen met bekende platte tekst. Gebruik ook een transformatie die een algoritme volledig specificeert (d.w.z. met zijn werkingsmodus en opvulling). Doe nooit zoiets als hieronder vermeld.

Net als hierboven zou het AES-algoritme worden gebruikt met de ECB-werkingsmodus, waardoor herhalingsaanvallen heel gemakkelijk worden. Voor nieuwe ontwikkeling, als er de minste mogelijkheid is om oud werk te vernieuwen, moeten we geauthenticeerde versleuteling gebruiken met bijbehorende gegevens (AEAD) -modus (bijvoorbeeld GCM en CCM). We hebben een authenticatietag met een volledige lengte van 128 bits. Als we een niet-geverifieerde modus gebruiken, gebruiken we CBC of CTR met een MAC om de cijfertekst te authenticeren.

  • Het juiste opvulschema kiezen

De gebruikelijke blokcoderingsmodi hebben de lengte van platte tekst nodig om een ​​veelvoud te zijn van de blokgrootte van het onderliggende coderingsalgoritme, wat zelden het geval is. Daarom hebben we wat opvulling nodig.Het Java-programma biedt ons drie verschillende schema's voor symmetrische codering, een daarvan is No Padding, wat onaanvaardbaar is, en een ander is ISO10126Padding, dat sinds 2007 is ingetrokken).

Daarom is PKCS5Padding de enige geschikte optie. De combinatie van sommige werkingsmodi (bijvoorbeeld CBC-modus) en PKCS5Padding-padding-schema kan leiden tot padding-orakelaanvallen. Het helemaal niet noemen van een opvulschema is gevaarlijker dan het aanbieden van een schema dat alleen vatbaar is voor bepaalde soorten aanvallen. De AEAD-modus wordt het meest aanbevolen om er zeker van te zijn dat u tegen deze aanvallen beschermd bent.

  • Asymmetrische algoritmen

Bij asymmetrische algoritmen hebben we de mogelijkheid om te kiezen uit twee opvulschema's. Het is belangrijk om ervoor te zorgen dat alleen OAEPWithAndPadding-schema's worden gebruikt. Gebruik in het geval van een samenvatting SHA1 of SHA256 / 384/512. Gebruik voor de maskergeneratiefunctie (MGF) de MGF1-padding zoals gespecificeerd. PKCS1Padding met RSA is sinds 1998 kwetsbaar voor Ciphertext-aanvallen [6].

Hier praten we over de juiste manier om een ​​transformatie te gebruiken in een 'Cipher.getInstance' -methode.

sort () in c ++
  • Symmetrische versleuteling

  • Asymmetrische versleuteling

Een beveiligingsniveau van elk versleutelingsschema is recht evenredig met de grootte van de sleutel. De sleutellengte moet lang genoeg zijn, zodat welke brute force-aanvallen het ook onhaalbaar worden, het tegelijkertijd ook kort genoeg moet zijn om de rekenbaarheid in gedachten te houden. Bovendien moeten we proberen te overwegen wat de komende 30 jaar nog steeds bestand is tegen computationele vooruitgang.

Hiermee komen we aan het einde van het artikel Versleuteling in Java. Ik hoop dat je een idee hebt gekregen van codering en decodering en waarom het in Java wordt gebruikt.

Bekijk de door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld. De training- en certificeringcursus Java J2EE en SOA van Edureka is bedoeld voor studenten en professionals die Java Developer willen worden. De cursus is bedoeld om u een voorsprong te geven in het programmeren van Java en u te trainen in zowel kern- als geavanceerde Java-concepten, samen met verschillende Java-frameworks zoals Hibernate & Spring.

Heeft u een vraag voor ons? Vermeld het in het commentaargedeelte van deze 'Versleuteling in Java' -blog en we nemen zo snel mogelijk contact met u op.