web-dev-qa-db-ja.com

GPGとOpenSSHは、キーペアでキーストレッチを使用しますか?

OpenSSHとGPGはどちらも、ユーザーディレクトリ内の既知のパスにファイルとして保存されるキーペアを生成できます。パスフレーズは生成プロセス中に常に要求され、対称暗号化アルゴリズムを使用して秘密鍵の内容を暗号化するために使用されます。

これらのプログラムがPBKDF2やscryptなどの キーストレッチング テクニックをパスフレーズに適用してから使用するかどうかを知りたいです。これらのファイルの1つが危険にさらされたとしたら、実際の復号化キーの取得にコモディティハードウェアで約10〜20秒かかることを確認して、当面はブルートフォース攻撃を実行できないようにします。それは可能ですか?

6

OpenSSH

バージョン6.5以降、OpenSSHはbcrypt KDFをサポートする新しい秘密鍵形式を提供します。 -oフラグをssh-keygenに渡すことで、新しい形式を適用できます。 KDFラウンドの数は、-aフラグでカスタマイズできます。

$ ssh-keygen -o -a 1000

参照: ssh-keygen man page および Ted Unangst 'blog

GPG

上記のコマンドフラグに相当するものは見つかりませんでした。あれば、コメントでお知らせください。回答を更新します。

3

OpenSSH-Line 3090:sshkey.c:sshkey_private_to_blob2

if (strcmp(kdfname, "bcrypt") == 0) {
        arc4random_buf(salt, SALT_LEN);
        if (bcrypt_pbkdf(passphrase, strlen(passphrase),
            salt, SALT_LEN, key, keylen + ivlen, rounds) < 0) {
            r = SSH_ERR_INVALID_ARGUMENT;
            goto out;
        }
        if ((r = sshbuf_put_string(kdf, salt, SALT_LEN)) != 0 ||
            (r = sshbuf_put_u32(kdf, rounds)) != 0)
            goto out;
    } else if (strcmp(kdfname, "none") != 0) {
        /* Unsupported KDF type */
        r = SSH_ERR_KEY_UNKNOWN_CIPHER;
        goto out;
    }

GPGでは、 GCrypt Library でサポートされている限り、必要なハッシュアルゴリズムを選択できます。

ハッシュアルゴリズム(MD4、MD5、RIPE-MD160、SHA-1、SHA_224、SHA-256、SHA-384、SHA-512、TIGER-192、ワールプール)、MAC(すべてのハッシュアルゴリズムのHMAC)、

PKCS8 RFC5208セクション1

パスワードベースの暗号化アルゴリズム([PKCS#5]で説明されているものなど)を使用して、秘密鍵情報を暗号化できます。

PKCS5 RFC2898 には、鍵導出関数としてPBKDF1およびPBKDF2のみがリストされています。

2
RoraΖ