Jump to content
zbeng

Extensia de criptografie Java (JCE)

Recommended Posts

Extensia de criptografie Java (JCE)

* Caracteristici generale

JCE implementeaza servicii criptografice specificate in cadrul mai larg al JCA (furrnizorul de servicii criptografice "SunJCE")

o cifrurile DES, Triple DES, Blowfish in modurile

+ ECB

+ CBC

+ CFB

+ OFB

+ PCBC

o generatoare de chei pentru

+ DES

+ Triple DES

+ Blowfish

+ HMAC-MD5

+ HMAC-SHA1

o MD5 cu PBE pentru DES-CBC (PKCS#5)

o generatoare de obiecte cheie si conversia catre/de la informatia de cheie pentru cifruri simetrice: DES, Triple DES si PBE si asimetrice: Diffie-Hellman

o acordul Diffie-Hellman asupra cheilor pentru mai multe entitati

o generator Diffie-Hellman de perechi de chei

o generator de parametri pentru algoritmul Diffie-Hellman

o implementare HMAC-MD5 si HMAC-SHA1 pentru algoritmi de hash (RFC 2104)

o implementare pentru schema de aliniere PKCS#5

o magazia de chei, JCEKS, pentru schema proprietara

si este un cadru de lucru (javax.crypto) care permite implementari proprietare pentru servicii criptografice.

* Detalii

o

Clase de baza

+

clasa cifru

# crearea unui obiect Cipher

* public static Cipher getInstance(String transformation)

* public static Cipher getInstance(String transformation , String provider)

transformation este de forma

* "algorithm/mode/padding"

* "algorithm"

ce au domeniile

* algorithm

o AES

o ARCFOUR/RC4

o Blowfish

o DES

o DESede

o ECIES

o PBEWith<digest>And<encryption> sau PBEWith<prf>And<encryption>

o RC2, RC4 sau RC5

o RSA

* mode

o NONE

o CBC (FIPS PUB 81)

o CFB (FIPS PUB 81)

o ECB (FIPS PUB 81)

o OFB (FIPS PUB 81)

o PCBC (Kerberos v4)

* padding

o ISO10126Padding

o NoPadding

o OAEPWith<digest>And<mgf>Padding (Optimal Asymmetric Encryption Padding, PKCS#1)

o PKCS5Padding

o SSL3Padding

+ initializarea unui obiect Cipher

# public void init(int opmode , Key key)

# public void init(int opmode , Certificate certificate )

# public void init(int opmode , Key key , SecureRandom random)

# public void init(int opmode , Certificate certificate , SecureRandom random)

# public void init(int opmode , Key key , AlgorithmParameterSpec params)

# public void init(int opmode , Key key , AlgorithmParameterSpec params, SecureRandom random)

# public void init(int opmode , Key key , AlgorithmParameters params)

# public void init(int opmode , Key key , AlgorithmParameters params, SecureRandom random)

unde opmode are domeniul

# ENCRYPT_MODE

criptare

# DECRYPT_MODE

decriptare

# WRAP_MODE

impachetarea cheii pentru transport

# UNWRAP_MODE

despachetarea cheii intr-un obiect java.security.Key

+ criptarea si decriptarea

# intr-un singur pas

* public byte[] doFinal(byte[] input)

* public byte[] doFinal(byte[] input , int inputOffset , int inputLen)

* public byte[] doFinal(byte[] input , int inputOffset , int inputLen , byte[] output)

* public byte[] doFinal(byte[] input , int inputOffset , int inputLen , byte[] output , int outputOffset)

# in mai multi pas

* apel repetat pentru metodele

o public byte[] update(byte[] input)

o public byte[] update(byte[] input , int inputOffset , int inputLen)

o public byte[] update(byte[] input , int inputOffset , int inputLen , byte output)

o public byte[] update(byte[] input , int inputOffset , int inputLen , byte output , int outputOffset)

* urmate de un singur apel al

o public byte[] doFinal(byte[] input)

o public byte[] doFinal(byte[] input , int inputOffset , int inputLen)

o public byte[] doFinal(byte[] input , int inputOffset , int inputLen , byte[] output)

o public byte[] doFinal(byte[] input , int inputOffset , int inputLen , byte[] output , int outputOffset)

o public byte[] doFinal()

o public byte[] doFinal(byte[] input , int outputOffset)

orice apel la o metoda doFinal reseteaza obiectul aducandu-l in starea de dupa initializare

+ impachetarea si despachetarea cheilor

# impachetarea

public final byte[] wrap(Key key)

# despachetarea

sunt necesare

* cheia impachetata

* numele algoritmului pentru cheie

* tipul cheii impachetate (Cipher.SECRET_KEY, Cipher.PRIVATE_KEY , Cipher.PUBLIC_KEY)

public final Key unwrap(byte[] wrappedKey , String wrappedKeyAlgorithm , int wrappedKeyType)

+ gestionarea parametrilor algoritmului

+ consideratii asupra iesirii

daca se utilizeaza una dintre metodele doFinal care permite specificarea buffer-ului de iesire se poate utiliza metoda

public int getOutputSize(int inputLen)

pentru a verifica daca acesta este suficient

o

clase cifru fluide

+

clasa cifru fluid de intrare

CipherInputStream

este un FilterInputStream care foloseste un Cipher (care trebuie initializat inainte de utilizarea CipherInputStream);este importanta utilizarea doar a metodelor care au fost suprascrise sau definite in aceasta clasa;

+

clasa cifru fluid de iesire

CipherOutputStream

o

clasa generator de chei

pentru algoritmi simetrici

+ crearea unui obiect KeyGenerator

# public static KeyGenerator getInstance(String algorithm)

# public static KeyGenerator getInstance(String algorithm , String provider)

unde algorithm are domeniul

# AES

# ARCFOUR/RC4

# Blowfish

# DES

# DESeed

# HmacMD5

# HmacSHA1

# HmacSHA256

# HmacSHA384

# HmacSHA512

# RC2

+ initializarea unui obiect KeyGenerator

# initializare independenta de algoritm

* public void init (SecureRandom random)

* public void init(int keysize)

* public void init (int keysize , SecureRandom random)

# initializare specifica unui algoritm

* public void init(AlgorithmParameterSpec params)

* public void init(AlgorithmParameterSpec params , SecureRandom random)

+ crearea unei chei

public SecretKey generateKey()

o

clasa convertor obiecte cheie/specificatii de cheie pentru chei simetrice

+ un obiect javax.crypto.SecretKeyFactory lucreaza pe chei simetrice

+ un obiect java.security.KeyFactory lucreaza pe o pereche de chei asimetrice

o

clasa obiect sigilat

un obiect a carui confidentialitate este asigurata de un algoritm criptografic

o

clasa acord asupra cheilor

asigura functionalitatea unui protocol de acord asupra cheilor

cheile implicate implicate in distributia unui secret sunt create

+ de catre generatoare de chei: KeyPairGenerator, KeyGenerator

+ de catre KeyFactory

+ ca rezultat al unei faze intermediare a unui protocol de acord asupra cheilor

utilizare

+ crearea unui obiect KeyAgreement

# public static KeyAgreement getInstance(String algorithm)

# public static KeyAgreement getInstance(String algorithm , String provider)

algorithm avand domeniul

# DiffieHellman (PKCS#3)

# ECDH (Elliptic Curve Diffie-Hellman, RFC327b)

# ECMQV (Elliptic Curve Menezes-Qu-Vanstone)

+ initializarea unui obiect KeyAgreement

initializarea se face cu o cheie privata si suplimentar prin specificarea unei surse pseudoaleatoare si a unei multimi de parametri de algoritm

# public void init(Key key)

# public void init(Key key , SecureRandom random)

# public void init(Key key , AlgorithmParameterSpec params)

# public void init(Key key , AlgorithmParameterSpec params , SecureRandom random)

+ realizarea fazei de acord

rularea cel putin o data a metodei

public Key doPhase(Key key , boolean lastPhase)

pentru care key este o cheie publica sau o cheie interemediara generata in faza anterioara

+ generarea secretului partajat

prin apelul uneia din metodele

# public byte[] generateSecret()

# public int generateSecret(byte[] sharedSecret , int offset)

# public SecretKey generateSecret(String algorithm)

o

clasa cod de autentificare mesaj

+ crearea unui obiect Mac

# public static Mac getInstance(String algorithm)

# public static Mac getInstance(String algorithm , String provider)

unde algorithm are domeniul

# HmacMD5

# HmacSHA1

# HmacSHA256

# HmacSHA384

# HmacSHA512

# PBEWith<mac>

+ initializarea unui obiect Mac

# public void init(Key key)

# public void init(Key key , AlgorithmParameterSpec params)

key este un obiect care implementeaza interfata javax.crypto.SecretKey

+ calcularea valorii de MAC

# intr-un singur pas

public byte[] doFinal(byte[] input)

# in mai multi pasi

apel repetat la una dintre metodele

* public void update(byte input)

* public void update(byte[] input)

* public void update(byte[] input , int inputOffset , int inputLen)

si un apel de terminare la una dintre metodele

* public byte[] doFinal()

* public byte[] doFinal(byte[] input)

* public byte[] doFinal(byte[] output , int outOffset)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...