0

Bouncy Castle for C# を使用して RSA キー ペアを生成しようとしています。http://bouncycastle-pgp-cookbook.blogspot.de/2013_01_01_archive.htmlにある Java のチュートリアルに従い、マスター キーと署名キーを作成しました。私のコードは次のようになります

IAsymmetricCipherKeyPairGenerator generator
    = GeneratorUtilities.GetKeyPairGenerator("RSA");
generator.Init(keyRingParams.RsaParams);

/* Create the master (signing-only) key. */
PgpKeyPair masterKeyPair = new PgpKeyPair(
    PublicKeyAlgorithmTag.RsaSign,
    generator.GenerateKeyPair(),
    DateTime.UtcNow);
Debug.WriteLine("Generated master key with ID "
    + masterKeyPair.KeyId.ToString("X"));

PgpSignatureSubpacketGenerator masterSubpckGen
    = new PgpSignatureSubpacketGenerator();
masterSubpckGen.SetKeyFlags(false, PgpKeyFlags.CanSign
    | PgpKeyFlags.CanCertify);
masterSubpckGen.SetPreferredSymmetricAlgorithms(false,
    (from a in keyRingParams.SymmetricAlgorithms
        where a.IsSelected
        select (int) a.Value).ToArray());
masterSubpckGen.SetPreferredHashAlgorithms(false,
    (from a in keyRingParams.HashAlgorithms
        where a.IsSelected
        select (int) a.Value).ToArray());

/* Create a signing and encryption key for daily use. */
PgpKeyPair encKeyPair = new PgpKeyPair(
    PublicKeyAlgorithmTag.RsaGeneral,
    generator.GenerateKeyPair(),
    DateTime.UtcNow);
Debug.WriteLine("Generated encryption key with ID "
    + encKeyPair.KeyId.ToString("X"));

PgpSignatureSubpacketGenerator encSubpckGen
    = new PgpSignatureSubpacketGenerator();
encSubpckGen.SetKeyFlags(false, PgpKeyFlags.CanEncryptCommunications
    | PgpKeyFlags.CanEncryptStorage);
masterSubpckGen.SetPreferredSymmetricAlgorithms(false,
    (from a in keyRingParams.SymmetricAlgorithms
        where a.IsSelected
        select (int) a.Value).ToArray());
masterSubpckGen.SetPreferredHashAlgorithms(false,
    (from a in keyRingParams.HashAlgorithms
        where a.IsSelected
        select (int) a.Value).ToArray());

/* Create the key ring. */
PgpKeyRingGenerator keyRingGen = new PgpKeyRingGenerator(
    PgpSignature.DefaultCertification,
    masterKeyPair,
    keyRingParams.Identity,
    keyRingParams.PrivateKeyEncryptionAlgorithm.Value,
    keyRingParams.GetPassword(),
    true,
    masterSubpckGen.Generate(),
    null,
    new SecureRandom());

/* Add encryption subkey. */
keyRingGen.AddSubKey(encKeyPair, encSubpckGen.Generate(), null);

/* Generate the key ring. */
keyRingGen.GenerateSecretKeyRing();

コードはこれまでのところ機能しており、デバッグ出力にも意味のあるキー ID が出力されます。ただし、秘密鍵をファイルに保存して GnuPG にインポートするとsec 0s/FFFFFFFF 2013-07-30、マスター キーとして表示されます。暗号鍵はOKです。

編集:gpg --list-packetショー

:secret key packet:
        version 4, algo 3, created 1375205303, expires 0
        unknown algorithm 3

アルゴリズム 3 はPublicKeyAlgorithmTag.RsaSignで、マスター キーには問題ないと思います (Java サンプルもそうしています) が、GnuPG はこれを好みません...

私は何を間違っていますか?

前もって感謝します、クリストフ

4

1 に答える 1