RSAパッケージによって生成されたユーザーのキーペアに対して、キーペアが一意であることを検証する必要がありますか(他のユーザーは同じキーペアを持っていません)。

フランナジャヤ:

私は最近デジタル署名を使って作業していますが、登録した各ユーザーがエンコードおよびデコードプロセス用に独自のキーペアを作成する方法を理解したいと考えています私はGoを使用してこの種のシステムを構築しており、Goのcrypto / rsaパッケージを使用しています安全なデジタル署名を作成する方法や、さまざまなものを見つける方法についての記事をすでに読んだことがあります。次に、非対称暗号化であるプロセスをセキュリティで保護するための最初のものを構築しようとします。

次に、私が直面している最初の問題は、「RSAパッケージによって生成されたキーペアを他のユーザーが持っていないことを検証する必要がありますか?」そうすることで、同じキーのペアを持っているため、偶然または故意に各ユーザーが他のユーザーのふりをすることはありません(たとえチャンスが非常に小さくても)。

このような状況について少し教えてください。私の質問が十分に明確でない場合は、気軽に質問したり、苦情を言ったりすると、ユーザーとシステムのセキュリティの側面について考えるのに苦労します。

import (
    "crypto/rand"
    "crypto/rsa"
    "encoding/pem"
    ...
)
...
func createKeyPairs(userRegistered *User) (err error) {
    keyPairs, err := rsa.GenerateKey(rand.Reader, 4096)
    if err != nil {
        return err
    }

    // SHOULD I ADD SOME VALIDATION FOR THE KEYPAIRS GENERATED BY CRYPTO RSA AND RAND PACKAGE HERE

    caPrivateKeyPEMFile, err := os.Create(userRequestingCA.ID + "PrivateKey.pem")
    pem.Encode(caPrivateKeyPEMFile, &pem.Block{
        Type:  "RSA PRIVATE KEY",
        Bytes: x509.MarshalPKCS1PrivateKey(keyPairs),
    })

    caPublicKeyPEMFile, err := os.Create(userRequestingCA.ID + "PublicKey.pem")
    pem.Encode(caPublicKeyPEMFile, &pem.Block{
        Type:  "RSA PUBLIC KEY",
        Bytes: x509.MarshalPKCS1PublicKey(&keyPairs.PublicKey),
    })
}
マーク:

いいえ、すべきではありません。

主に厳密な秘密鍵の比較では十分はないため、係数の2つの素数が異なることを確認する必要があります。

2番目の理由は、それがほとんど無意味であることです。同じ素数を選択する可能性は信じられないほど低く、単に時間を浪費しているだけです。

4096ビットのRSA鍵があるとすると、2つの2048ビットの素数を探していることになります。それらの衝突の可能性は天文学的に小さいです。

あなたのマシンにひどいエントロピーがあった場合、それ役立つかもしれない一つのケースでしょう。しかし、おそらく他の問題もあるでしょう。それはおそらく別の問題です。

モジュラスプライムが重要な理由(未加工のキーコンテンツではなく)の詳細、およびプライムコリジョンの可能性の計算の詳細については、このsecurity.seの質問を参照しください

3番目の理由は、すべてのユーザーの秘密鍵のパラメーターを保持する必要があることですあなたは間違いなくそうすべきではありませんし、そもそも彼らに代わってキーペアを生成すべきではないでしょう。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ