Как создать OpenPGP KeyPair без ключевой фразы, используя BouncyCastle? - PullRequest
3 голосов
/ 10 апреля 2011

Я работаю над проектом, который должен генерировать GPG-ключи для шифрования с открытым ключом. Мой язык для этого - Scala, а библиотека для криптографических материалов - BouncyCastle

Генерация ключей работает нормально, но я не могу найти способ для генерации ключей без ключевой фразы. Каждому классу и каждому способу генерации ключей в BounceyCastle требуется пароль.

Использование пустой парольной фразы приводит к тому, что gpg все еще спрашивает меня об этом при расшифровке / подписывании чего-либо, передача значения null создает исключение при генерации ключа.

Вот код, который я использую (импорт лишен):

object KeyGenerator {
  Security.addProvider(new BouncyCastleProvider())

  val kpg = KeyPairGenerator.getInstance("RSA", "BC")
  kpg.initialize(2048)

  def generateKeyPair(userID: String, 
                      expiration: Option[Date]): PGPSecretKeyRing = {


    val now = new Date

    val keyPair = kpg.generateKeyPair();
    val secretKey = new PGPKeyPair(RSA_GENERAL,     
                                   keyPair,   
                                   now)

    val keyPair2 = kpg.generateKeyPair();
    val secretKey2 = new PGPKeyPair(RSA_GENERAL,     
                                    keyPair2,     
                                    now)

    val subpacketGen = new PGPSignatureSubpacketGenerator
    subpacketGen.setKeyFlags(true, KeyFlags.CERTIFY_OTHER | KeyFlags.SIGN_DATA
                             | KeyFlags.ENCRYPT_COMMS | KeyFlags.ENCRYPT_STORAGE)


    val keyRingGen = new PGPKeyRingGenerator(PGPSignature.POSITIVE_CERTIFICATION, 
                                             secretKey,  
                                             userID,
                                             RSA_GENERAL,
                                             "".toCharArray,
                                             true,   
                                             subpacketGen.generate,
                                             null, 
                                             new SecureRandom(), 
                                             "BC");   
    keyRingGen.addSubKey(secretKey2)
    keyRingGen.generateSecretKeyRing
  }
}

1 Ответ

1 голос
/ 11 сентября 2011

Вы можете попробовать использовать SymmetricKeyAlgorithmTags.NULL (т.е. не шифровать) для параметра encAlgorithm для конструктора PGPKeyRingGenerator.Возможно, API все еще требует заполнитель passPhrase, но я думаю, что в этом случае он будет проигнорирован.

...