Androidのため、RSAに基づく認証アプリを現在書いています。ロック画面/ PINなしで電話に物理的にアクセスしている場合でも、コピーすることはできません。
ただし、電話内のHSMは、秘密鍵がストレージを離れることがなく、「使用される」だけであることを保証し、バウンスキャッスル実装のバグのためにPKCS 1.5パディングのみをサポートします。
暗号化されたメッセージは毎回(nonce)異なるため、2つの暗号化されたメッセージがネットワーク上で同一であることを確認することはできません。
攻撃者または敵対者は、電話にアクセスできなくても、パディングOracleにアクセスできません。アプリは、ユーザーに暗号化されたQRをスキャンさせることで機能し、この暗号化されたQRはOTPコードに復号化されます。はい、攻撃者はフィッシングページまたはハイジャックされた接続にパディングエラーを含むQRコードを表示し、ユーザーが認証を続行する(有効なOTPを入力する)かどうかを確認できますが、一部のページでパディングOracle攻撃には、パディングに対する何百万もの「テスト」が必要です。
攻撃者または敵対者が電話にアクセスできる場合、攻撃者は電話自体をパディングOracleとして使用できます。また、電話にアクセスできる場合、攻撃者はアプリを使用して任意のメッセージを解読できます。
満たさなければならないセキュリティ目標は、次のとおりです。
攻撃者は電話にアクセスできませんが、攻撃者は認証できません。
攻撃者が長時間にわたって電話にアクセスできる場合、攻撃者は認証できるはずですが、秘密鍵を抽出することはできません。
攻撃者が電話にアクセスできなくなった場合、たとえば、攻撃者が解雇された前の従業員であり、その後電話を投入した場合、以前にアクセスできたとしても、攻撃者は認証できなくなります。電話、および安全なハードウェア内のキーペアが変更されていなくても。
このページでは、パディングOracle攻撃を実装することで秘密鍵を抽出することが可能であると回答が述べています: RSAのOAEPアドレスは、特定のパディングの弱点ですか?
ただし、ウィキペディアのページでは、秘密鍵の開示については触れられていません。 https://en.wikipedia.org/wiki/Padding_Oracle_attack
しかし、Wikipediaのページでは、パディングOracleを使用して、攻撃者はパディングOracleの応答をチェックするだけで任意のメッセージを復号化でき、復号化エンジンのキーまたはプレーンテキスト出力にアクセスする必要がありません。ただし、この場合、攻撃者がパディングOracleにアクセスできる場合、攻撃者はプレーンテキスト出力にもアクセスでき、その逆も同様です。つまり、攻撃者が復号化エンジンにアクセスできる場合、任意メッセージの復号化はすでに可能です。 、Oracleのパディング攻撃に頼る必要はありません。
2つの点はまったく異なります。秘密キーを使用すると、攻撃者はパディングOracleにアクセスできなくても復号化を実行できますが、パディングOracleはメッセージの復号化にしか使用できない場合、パディングOracleは実質的に役に立たなくなります。この場合、攻撃者にとって重要なのは、攻撃者がOracleアクセスにパディングを持たなくなると、復号化を実行できなくなり、セキュリティの目標が達成されるためです。
私が持っている質問は:
1:この場合、PKCS 1.5を使用しても安全ですか?
2:パディングOracleを使用して秘密鍵を抽出することは本当に可能ですか、それともパディングOracleは任意のメッセージの復号化を許可するだけですか? 2つのリンクされた記事は、その点であいまいです。
この場合、PKCS 1.5を使用しても安全ですか?
ここでは「いいえ」と答えることはできません。ただし、実用的な目的で「thisの場合に安全」を回避することをお勧めします。たとえば、秘密鍵を保護することだけがメッセージの機密性ではなく、RSA暗号化を使用するのはなぜですか?また、BouncyCastleがまだそのバグを修正していない場合-すぐに修正される可能性があります(ところで、報告しましたか?)。
パディングOracleを使用して秘密鍵を抽出することは本当に可能ですか、それともパディングOracleは任意のメッセージの復号化を許可するだけですか?
いいえ、RSA Padding Oracleは任意のメッセージの復号化のみを許可します(タイミング攻撃などについては話していません)。したがって、RSA秘密鍵は電話のHSMで安全です。
CRYPTO'12論文 は、パディングOracleをキーラッピングに適用することに関するものでした。キーは「ラップ」され(別名RSA暗号化)、トークンに渡され、そこで「ラップ解除」されます(別名、復号化され、準備されます)このトークンで使用するため)。この攻撃を通常の暗号化/復号化に適用しても意味がありません。これは、デバイス(携帯電話、暗号化トークン)とPIN-デバイスに復号化を指示できる場合1つのリクエストで受け取った暗号文は、少しずつこじ開ける必要はありません。
また、復号化ではなく署名に基づく認証スキームを検討しますか?
更新
署名の代わりに復号化に基づく認証方式を選択したのは、署名が鍵と同じくらい巨大になるためです。
RSA暗号化の場合、RSA署名の場合と同様に、暗号文は鍵(係数)と同じ大きさです(同じ理由で、これがパディングの目的です)。しかし、QRスキャンとして電話に渡されるため、問題ではないと思います...?
しかし、システムはデバイスのネットワーク接続なしでも機能する必要があるため、サーバーに入力された単純なOTP文字列に復号化する暗号化されたQRコードにシステムを基づいています
あなたのコメントに基づいて、あなたは電話自体が接続されていない可能性があることを意味します、すなわち、それはQRスキャンされたものに反応することができません。結果を表示するだけです(おそらくユーザーが簡単に入力できるかなり短いものです)。
あなたが説明するユースケースでは、それは大丈夫だと思います。とにかくあなたの秘密鍵は公開されていません。あなたの公開鍵が電話からサーバーにどのように取得されるのかと思いますが、この特定のクライアントのOTPを暗号化するためにそれを使用します(そのため、電話にはsome接続が必要ですある時点)。