Yubikeyを使用してRSA復号化を直接実行できるツールはありますか?

Yubikeyを使用してRSA復号化を直接実行できるツールはありますか?

私が探しているユースケースは首のないサーバーを開き、ハードウェアキーを使用して「ロック解除」すると、サーバーのスクリプトは私が接続したことを認識し、PINやパスワードなどの要素なしで自動的に使用されます。

これを達成する最も原始的な方法は、サーバーのスクリプトが検索してコンテンツを復号化するために使用できる暗号化されていない生のAESキーを持つUSBサムドライブを持つことです。欠点は、USBスティックをコピーでき、紛失したときに元に戻せないことです。また、スクリプトがUSBドライブを使用している間にドライブを取り外すと、USBドライブ自体のファイルシステムが破損する可能性があるという問題もあります。

スマートカードやYubikeyはこれらの問題に対する明確な解決策のように見えますが、Yubikeyソリューションを説明するほとんどの人はこれを2番目の認証要素としてgpgと組み合わせるようです。 「追加」認証要素を必要とせず、キーが可能ないくつかの復号化方法の1つになりたいです。私は各ホストにgpgを設定したくないし、「アイデンティティ」や有効期限、信頼チェーンなどをしたくない。もう1つの人気のあるオプションはLUKSと統合することですが、rootではなくユーザースペースオプションがあれば良いと思います。

暗号化されたAESキーを取得し、ハードウェアのRSA秘密キーを使用してそれを復号化するようにYubikeyに直接要求したいです(PINやパスワードは必要ありませんが、デバイスを短く押すか長押しすることで可能です)。

これを達成するための既存のツールはありますか?スクリプト言語ライブラリも良いです。

ベストアンサー1

最新のLinuxまたは同様のシステムで実行されていると仮定すると、暗号化部分は非常に単純でなければなりません。

(編集:あなたの質問をもう一度読んでみてください。ここに行く認証について質問し、RSA暗号化に関する具体的な質問でここに回答しました。ここで説明されているように設定してから、この種の操作を実行するように設計された pam_pkcs11 を確認することをお勧めします。 )

設定

Yubikeyに「PIV」モードが有効になっていて通信できるOpenSC PKCS#11モジュールがインストールされていることを確認してください。 OpenSSL PKCS#11 "エンジン"もインストールします。

使用Yubico-piv-ツールまたはRSAキーをインストールする別の方法コイン投入口「カード検証スロット9e」のような選択。既存のキーをインポートしたり、Yubikeyの外に存在しないキーを生成したりできます。

契約書に署名

今は簡単です。ファイルでRSAキーを使用できるすべてのソフトウェア しなければならない標準を受け入れるPKCS#11 URI代わりにYubikeyのキーを識別します。

カード認証スロットのキーのURIは次のとおりです'pkcs11:manufacturer=piv_II;id=%04'

だからあなたは次のことをすることができます

 echo "test payload" | openssl dgst -sha256 -sign 'pkcs11:manufacturer=piv_II;id=%04' -hex

...OpenSSL以外には何もありません。かなりまだ完了していないので追加する必要があります。

 -engine pkcs11 -keyform engine

すべての暗号化ソフトウェアの作成者はユーザーを嫌い、怠惰なので、上記のコマンドラインにミルダ明らかな事実は、PKCS#11 URIを提供したという事実に由来します。これも少し最新のOpenSSLはエンジンの代わりに「サプライヤー」を使用しているので、昔ながらだと思います。まだただ仕事を正しくするわけではないので、少し調整が必要な場合があります。その他無意味なビジョンオーダーを使用すると、そうすることができます。

良いソフトウェアに慣れるこれらの追加のヒントは必須であり、単にファイル名をURIに変更し、正しい操作を実行します。そうでない場合はバグを報告してください。

はい

 $ yubico-piv-tool -s9e -ARSA2048 -agenerate | tee pubkey.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr9LrzjNbRABqhDQrGi3l
VcQhmUu0lls8k4XnO8c/U0oS6IvH4H7HuqXFfwThYofxIgA2eIXuRXf+V/CSWtXN
40Bb10QKcTXVATm05+KFNWg1GCVg2yrvsUOQSd6MOxAa5goUUi2xOjeLFZRvXuvt
YmLytwY77YqE0WOHYfYuk9kolueZHhq4BSOVRmQpZxKd6/MkWlT46SPc3Bwbyx41
t2U42vlnHYuma3NF6qI+a+LaMyvkFVBkRM6A1WB2u5jjl/ZQmyYsuqg2e8xu7P8m
5/GUH9HjD074+ea1NEdMncPhKjO+pL24BSebtIPUmzEJIh6kCaweJYiMKYuLx15H
HQIDAQAB
-----END PUBLIC KEY-----
Successfully generated a new private key.
$ echo Test | openssl pkeyutl -encrypt  -pubin -inkey pubkey.pem > Test.enc
$ openssl pkeyutl -decrypt -in Test.enc -engine pkcs11 -keyform engine  -inkey 'pkcs11:manufacturer=piv_II;id=%04'
Engine "pkcs11" set.
Test

署名もできます...

 $ echo Test | openssl dgst -sha256 -sign 'pkcs11:manufacturer=piv_II;id=%04' -engine pkcs11 -keyform engine  > signature.bin
 $ echo Test | openssl dgst -sha256 -verify pubkey.pem -signature signature.bin
Verified OK

長い話を短く

Yubikey PIVのスロットごとにポリシーが異なり、特にPINが必要かどうかに関するポリシーが異なります。私がリンクした文書を読んでください。バラよりhttps://www.infradead.org/openconnect/pkcs11.htmlもっとヒントを見るには発見するトークンに提供されるオブジェクトの URI。

おすすめ記事