Jump to content
zbeng

Extensia de criptografie Java (JCE)

Recommended Posts

Posted

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)

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...