2015-08-22 29 views
6

'un ayrılması için Java'nın RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING adlı bir modu vardır. Bu ne anlama geliyor?RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING

RFC3447 , açık anahtarlı şifreleme sistemi Standartları (PKCS) # 1: RSA Şifreleme Özellikler Sürüm 2.1, bölüm 7.1.2 Şifre çözme işlemi Hash diyor ve MGF RSAES-OAEP-şifresini için her iki seçenek vardır. MGF, Bölüm B.2.1 MGF1'da tanımlanan kendi işlevidir ve bunun da kendi Hash "seçeneği" vardır.

Belki de RSAES-OAEP-DECRYPT ve MGF1'deki Hash "seçeneğinin" aynı olması gerekiyor veya belki de değiller, bana açık değil. Eğer onlar daha sonra RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING varsa, her ikisi için sha256 kullanılmalıdır demektir sanırım. Fakat eğer aynı olmamaları gerekiyorsa, o zaman sha256'nın RSAES-OAEP-DECRYPT için ve örneğin MG1 için kullanılan sha1'i kullanabilirsiniz. Ve eğer durum buysa, o zaman sha256 hangi fonksiyonun kullanılmasını gerektiriyor? Ve diğer fonksiyon için karma algoritmanın kullanılması gerekiyor?

ECB bu bağlamda ne anlama geliyor? ECB bir simetrik blok şifreleme modudur. Elektronik Kod Kitabı. Belki de, Java'nın modulodan daha büyük olan düz metinlerle nasıl uğraştığı kastedilmeli? Örneğin, metin metnini, modüller kadar büyük olan parçalara böler ve sonra her birini RSA ile şifreler ve birleştirir? Sadece tahmin ediyorum ..

cevap

17

OAEP için varsayılan, MGF1 için SHA-1 kullanmaktır. Seçilen karma'nın OAEP'in güvenliği üzerinde çok fazla bir etkisi olmadığını unutmayın, bu yüzden çoğunlukla bu varsayılan değere bırakılacaktır.

Biz kolayca "OAEPPadding" ve OAEPParameterSpec karşı test ederek bu test edebilirsiniz: Eğer parametre olarak MGF1 için "SHA-256" yerine eğer

// --- we need a key pair to test encryption/decryption 
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
kpg.initialize(1024); // speedy generation, but not secure anymore 
KeyPair kp = kpg.generateKeyPair(); 
RSAPublicKey pubkey = (RSAPublicKey) kp.getPublic(); 
RSAPrivateKey privkey = (RSAPrivateKey) kp.getPrivate(); 

// --- encrypt given algorithm string 
Cipher oaepFromAlgo = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING"); 
oaepFromAlgo.init(Cipher.ENCRYPT_MODE, pubkey); 
byte[] ct = oaepFromAlgo.doFinal("owlstead".getBytes(StandardCharsets.UTF_8)); 

// --- decrypt given OAEPParameterSpec 
Cipher oaepFromInit = Cipher.getInstance("RSA/ECB/OAEPPadding"); 
OAEPParameterSpec oaepParams = new OAEPParameterSpec("SHA-256", "MGF1", new MGF1ParameterSpec("SHA-1"), PSpecified.DEFAULT); 
oaepFromInit.init(Cipher.DECRYPT_MODE, privkey, oaepParams); 
byte[] pt = oaepFromInit.doFinal(ct); 
System.out.println(new String(pt, StandardCharsets.UTF_8)); 

kod dolgu ilgili istisna ile başarısız olur.

Genişletilmiş algoritmanın neden gerekli olduğunun nedeni, diğer Cipher algoritmaları ile uyumluluktur. Kod, ör. "RSA/ECB/PKCS1Padding", OAEP parametrelerini izin vermeksizin herhangi bir parametre kullanmaz. Dolayısıyla, daha uzun bir dizge olmadan OAEP, değiştirmede düşüş olarak işlev yapamaz.


operasyon "ECB" modu bu bağlamda bir şey ifade etmiyor, bu "None" olmalıydı veya tamamen dışında kalan gerekirdi. SunRSA sağlayıcısının RSA uygulamasını kullanarak yalnızca tek bir bloğu şifreleyebilirsiniz.

Daha fazla veriyi şifrelemek isterseniz, rasgele (AES) simetrik anahtar oluşturun ve OAEP kullanarak şifreleyin. Ardından, belirli verilerinizi şifrelemek için AES tuşunu kullanın. Bu, verileri şifrelemek için hem asimetrik hem de simetrik ilkelleri kullandığı için hibrid bir kriptosistem olarak adlandırılır.

+1

BouncyCastle kripto sağlayıcısı ile uğraşıyordum ve BouncyCastle, "RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING" konusunda farklı şekilde çalışıyor gibi görünüyor. yani. Java'nın varsayılan şifreleme sağlayıcısı, MGF hash bouncycastle'ın sha256'yı kullandığı sırada sha1 kullanıyor. Bu muhtemelen bağımsız olarak doğrulanmalıdır ama bana öyle geliyor .. – neubert

+2

Sadece doğruladım, sun.security.rsa.RSAPadding OAEP SHA256 ile kullanıldığında, MGF1 fonksiyonu için SHA1 kullanıyor, bouncy castle SHA256'yı her ikisi için kullanıyor. neden uyumlu değiller. – peceps

+2

@peceps Ek bilgi için teşekkürler. BC'nin varsayılan Sun uygulamasıyla uyumlu olmadığı birkaç köşe durumu vardır. Eğer BC takımına istekliyse soruyorum. –