2

Speex ライブラリを使用して、p2p ボイス チャット アプリケーションで bytearray をエンコード/デコードしています。AES 暗号化を使用しようとしましたが、暗号化と復号化が原因で、UI スレッドがハングアップします。問題を疑似コードで書いてみます。

OnPlayer 側:

while(keep_on_running) {
socket.receive(packet); 
encodedFrame = AESEncrytion.decrypt(encodedFrame);
Speex.decode(encodedFrame, encodedFrame.length, pcmFrame);

}

レコーダー側:

while(keep_on_running) {
Speex.encode(pcmFrame, encodedFrame);       
AESEncrytion.encrypt(encodedFrame);
socket.send(packet)

}

データの連続ストリームを暗号化/復号化するための最良の方法を知りたいです。

4

1 に答える 1

4

データの連続ストリームを暗号化/復号化する最良の方法は、ストリーム暗号モードでストリーム暗号またはブロック暗号を使用することです (それを待ちます)。

ブロック暗号操作モード (CBC や安全でない ECB モードなど) の問題は、暗号化/復号化操作ごとにデータの完全なブロックが必要になることです。これは、AES に対して一度に 16 バイトを提供する必要があることを意味します。これにより、発生しているブロッキングの問題が発生しやすくなります。

AES カウンター モード暗号化を使用すると、いくつかの利点があります。

  • 「キーストリーム」を事前に計算できます。これは、レイテンシの問題 (AKA 遅延) に対処するのに役立ちます。
  • 受信した各バイトを単純に復号化できます
  • ストリームをGCM モードの認証済み暗号化に変換するのは比較的簡単です(認証済み暗号化は機密通信の必須条件と同じくらい優れています)。
  • マルチスレッド CTR 実装を使用して、暗号化/復号化を高速化できる場合があります

パフォーマンスの問題が発生した場合は、人気のあるSalsa20ストリーム暗号などの特殊なストリーム暗号を検討することもできます。ストリーム暗号は、高効率/高帯域幅通信専用に生成されることがよくあります。

[編集]

TLSも UDP パッケージで動作するように定義されていることに注意してください。独自のトランスポート プロトコルの実装について確信がない場合は、標準化されたオプションを使用することをお勧めします。ランタイムでこれをすぐにサポートするライブラリが見つからない場合があることに注意してください。

ウィキペディアからの引用:

ただし、User Datagram Protocol (UDP) や Datagram Congestion Control Protocol (DCCP) などのデータグラム指向のトランスポート プロトコルでも実装されており、Datagram Transport Layer Security ( DTLS )という用語を使用して個別に標準化されています。

于 2013-07-20T11:16:14.137 に答える