SMSメッセージを暗号化するためのアプリケーションを作成したいと思います。公開鍵/秘密鍵の問題を処理することはほとんどのユーザーにとって難しすぎるため、十分に長い議論の末、対称暗号化を使用することにしました。
そのため、秘密鍵は、当事者間の音声対話またはその他の方法で転送する必要があると思います。
私の質問は、SMSの暗号化に適したアルゴリズムは何でしょうか?暗号はメッセージの最大長160文字を考慮し、印刷可能な記号のみを受け入れる必要があります。メッセージのチャンクとあらゆる種類の問題-容認できません。一部の電話はチャンクされたメッセージを自動的にマージできることを知っていますが、製造/モデルの非常に多様性を念頭に置いてください-これは機能しません。
考え、アドバイスはありますか?
私はあなたにあなたの前提を再訪することをお勧めします。両方のエンドポイントにアプリがある場合、アルゴリズムの選択基準は無効です。ユーザーではなくアプリが暗号化/復号化を処理します。公開鍵暗号は、この状況で潜在的に優れたセキュリティを提供できます。たとえば、最初に使用するときの信頼(SSHのような)キー管理を有効にすることができます。また、まず脅威モデルについて考えることから始めることをお勧めします。最初の質問は、どの暗号アルゴリズムを使用するべきですか?あなたの最初の質問は、「私が防御しようとしている脅威は何ですか?」
SMSテキストに対して対称暗号化を使用する必要がある場合、CBCモードのAESと暗号テキストの盗用は妥当な選択です。暗号化するメッセージが16の偶数倍でない場合、暗号テキストの盗用によって無駄がなくなります。バイト。スペースが必要なIVが必要です。スペースを節約するために、カウンターを送信し、カウンターのAES暗号化をIVとして使用できます。
SMSを介した暗号文の転送を回避できる方法がある場合は、回避してください。 160文字は非常に制限されています。インターネット経由でメッセージを転送できますか?
SMSを介したトンネリングを回避できる場合は、アプリに独自の秘密/公開キーがあり、連絡先ごとに公開キーを保持するモデルを検討することができます。新しい誰かに連絡するとき、アプリは独自の公開鍵を送信し、他の人から公開鍵を受信し、その公開鍵を記憶し、その公開鍵で暗号化されたメッセージを送信します。もちろん、これは中間者攻撃に対して脆弱ですが、使いやすいかもしれません。
さまざまなメーカーとモデルを試そうとしている場合、それは単に機能しません-多くのスマートフォンでは、サードパーティソフトウェアがインターネットゲートウェイ経由でSMSメッセージを送信することを許可していますが、最もオープンな電話のオペレーティングシステムでは、サードパーティのソフトウェアが着信するSMSメッセージを処理することを許可していません。
ただし、不可能性を無視すると、128 AESで問題なく動作するはずです。これにより、平文よりも大きくない暗号文が得られます。 8つは140バイトのSMSに収まります。 SMSの文字エンコードを使用すると、146文字のメッセージが残ります。
対称暗号化を指定したので、鍵配布の問題をあなたに任せて私は幸せです!
AESまたはAES + RSAの組み合わせを使用する必要があります。今度は160キャラクターの問題です。実際に利用可能なペイロードは140バイトのみです。携帯電話(GSMまたはCDMA); 140の利用可能なバイトは7ビットエンコーディングにエンコードされるため、140バイトに160文字を入れることができます。
これでSMSがチャネルであり、暗号化が行われるため、通信モードはテキストメッセージではなくバイナリメッセージになる可能性があります。バイナリメッセージは、UDH(ユーザーデータヘッダー)に7バイト余分にかかります。したがって、操作できる文字数は133のみです。
SMSチャネルを使用している場合は、両端にAPPが必要だと思います。ポートベースのメッセージングを使用できます。これを使用して、ネイティブの受信トレイではなく、エンドアプリケーションによってメッセージが直接処理されます。
SMSチャネルの利点の1つは、ストアアンドフォワードプロトコルです。つまり、メッセージを受信する相手の可能性が高く、問題は遅延とペイロードの制限です。アプリケーションレベルのセグメンテーションを使用すると、長いメッセージも送信できます。
SMSチャネルのもう1つの利点は、双方向通信では、真の信頼できる当事者がメッセージングにのみ関与していることが確認されることです。 AはCにSMSを送信している間にBになりすますことができます。しかし、Cが応答すると、常にAだけに送信されます。したがって、双方向のネゴシエーションを使用して、相互通信のための鍵生成および共有アルゴリズムを構築できます。