指定されたソリューションに関連している可能性がある、データにいくつかの異常なサイズ制限があります。
シナリオは次のとおりです。セキュアサーバーAは、オフラインのクライアントBが使用する必要のある240バイトのデータを生成します。クライアントBは、240バイトのメッセージが変更されていないことを確認する必要があります。私はセキュリティの世界のセマンティクスと専門用語につまずく傾向がありますが、私が探しているのは「データの整合性」だと思います。
このプロセスに従うと、「データの整合性」が保証されますか? (私は保証が強い言葉であるかもしれないと気づきます)
クライアントBがメッセージの復号化に成功した場合、これにより、少なくとも学問的に、データが変更されていないことが保証されますか?
注1:クライアントBへの転送メディアで使用可能なバイト数は非常に多く、暗号化による最大40%の増加は許容されます。たとえば、2048ビットを使用するRSA署名240バイトのメッセージから256バイトになるキーは許容されます。
注2:プライバシーは期待できません。データが誰にでも読み取れるかどうかは気にしません。メッセージが改ざんされているかどうかを検出できるのはスキームのみです。
付随的な質問:推奨されるアルゴリズムはありますか? 2048ビットのキーを使用してRSAをいじっています。
セキュリティウィザードに感謝します。
あなたは正しい軌道に乗っています。秘密鍵と公開鍵のペアを使用して署名を作成および検証することです。
署名アルゴリズムの理解が正しくありません。データの説明のハッシュを暗号化する「標準」を与えられ、それを誤って解釈しました。
まず、一般的な説明は、データ自体ではなく、データのハッシュを暗号化することです。データのハッシュを暗号化する場合、データを変更する誰かは、暗号化されたハッシュを変更して一致させる方法を知りません。データ自体を暗号化する場合、整合性を提供するものは何もありません。攻撃者は必要に応じてそれを変更できます(ただし、暗号化された値の変更元を知ることはできません)。
第二に、このあまりにも一般的な説明は正しくありません(より良いが、長い説明については here を参照してください)。この説明はRSAでのみ機能し、RSAについてはあまり正確ではありません。 RSA署名を作成するために実行される操作の1つは、RSAdecryptionでも使用されるため、RSA署名は、データのハッシュのdecryptionですが、最初は暗号化されていなかったものを復号化しています。つまり、more混乱しますが、それでも署名と暗号化に必要な異なるパディングは考慮されていません。
署名は間違いなくあなたが探しているものですが、RSA署名は大きい(2048ビットのキーでは256バイト)ので、調査することをお勧めします [〜#〜] ecdsa [〜#〜] 、同様のセキュリティレベルの署名ははるかに小さいため。そのWikipediaの記事によると、128ビットのセキュリティレベル(非常に標準)にするためには、署名は512ビット(64バイト)であり、許容できるようです。ただ、あなたのためにそれを行うためのライブラリーを見つけてください。これらのものを台無しにするのはあまりにも簡単です。
いいえ、非対称暗号化はデータの整合性を保証しません。これを示す1つの方法は、機密性を保証する非対称暗号化スキームを示すことですが、それでも 可鍛性 です(そして、攻撃者は受信者がそれを検出することなく暗号文を変更できます)。
前の段落のリンクは、RSA、ElGamal、およびPaillier(非対称暗号化アルゴリズム)が順応性があることを説明しているため、これらはすでに3つの例です。別の例の形式は、ほぼ実用的な非対称暗号化システムが hybrid であることに注意して、対称プリミティブを使用して対称セッションキーを保護し、次にメッセージテキストを処理する対称暗号化アルゴリズム。また、対称暗号化アルゴリズムの多くは柔軟であるため、柔軟なハイブリッドシステムを簡単に構築できます。
それが理論的な答えです。実際の答えは自分で転がしてはいけない—可鍛性の落とし穴に陥らないように設計された入念に吟味された暗号化実装を使用することです。典型的なソリューションは デジタル署名 (非対称)または 認証された暗号化 (対称システムまたはハイブリッドシステムの対称部分のいずれか)を使用することです。