2017-02-16 7 views
1

Как правило,и PKCS1v15 могут использоваться для заполнения подписей RSA.
И для Java код также прост, но он просто не может определить используемую стратегию заполнения.
Мой код:какая стратегия дополнения используется SunJCE SHA1WithRSA

Signature signature = Signature.getInstance("SHA1WithRSA"); 
signature.initSign(privateKey); 
signature.update(plainBytes); 
byte[] signBytes = signature.sign(); 

Могу ли я явно определить PSS с MGF1 в качестве стратегии отступа с помощью SunJCE в качестве поставщика?

+0

У меня есть что он использует «PKCS1v15» в качестве стратегии дополнений, но до сих пор не знает, поддерживает ли «SunJCE» «PSS». – xuanzhui

ответ

1

PSS нет в списке поддерживаемых алгоритмов SunJCE. Однако SHA256withRSA/PSS реализован в android.

Я предлагаю использовать BouncyCastle

Security.addProvider(new BouncyCastleProvider()); 

Signature sig = Signature.getInstance("SHA1withRSA/PSS"); 
sig.initSign(privateKey); 
sig.update(data); 
byte[] signature = sig.sign(); 

ОБНОВЛЕНО

Значение по умолчанию maskGenAlgorithm в PKCS#1 v2.1 является MGF1.

RSASSA-PSS-params ::= SEQUENCE { 
    hashAlgorithm  [0] OAEP-PSSDigestAlgorithms DEFAULT sha1, 
    maskGenAlgorithm [1] PKCS1MGFAlgorithms DEFAULT mgf1SHA1, 
    saltLength   [2] INTEGER DEFAULT 20, 
    trailerField  [3] INTEGER DEFAULT 1 
} 

Я предполагаю, что BouncyCastle использует его. Вы можете определить свои собственные параметры PSS. Например (см PSSParameterSpec)

sig.setParameter(PSSParameterSpec.DEFAULT); 
+0

Вы правы, это не нужно. Спасибо – pedrofb

+0

Я не видел никаких признаков 'MGF1', это по умолчанию? – xuanzhui

0

Вдохновленный ответ, просто добавить фрагмент кода, который показывает, как установить все Params вручную, и, конечно, BouncyCastle должен быть использован:

Signature signature = Signature.getInstance("SHA256WithRSA/PSS", "BC"); //second param "BC" is not really required 
MGF1ParameterSpec mgf1ParameterSpec = new MGF1ParameterSpec("SHA-256"); 
PSSParameterSpec pssParameterSpec = new PSSParameterSpec("SHA-256", "MGF1", mgf1ParameterSpec , 20, 1); 
signature.setParameter(pssParameterSpec); 
signature.initSign(privateKey); 
signature.update(plainBytes); 
byte[] signBytes = signature.sign(); 
Смежные вопросы