![](https://habrastorage.org/storage2/aa5/f16/0ac/aa5f160ac691ccc8643c63c350975a8b.jpg)
こんにちは、Habrachitatel!
IM +マルチプロトコルモバイルクライアントの最新の更新により、OTR(Off-the-Record)暗号化プロトコルがサポートされました。 通信時に使用するIMプロトコル(OSCAR、Jabber、Gtalk、MSN、YIMなど)に関係なく暗号化機能を使用できることは注目に値します。
このプロトコルの主な機能は次のとおりです。
- メッセージの暗号化-誰もメッセージを読むことができません。
- 対談者認証-対談者が誰であるかに対する自信。
- 秘密鍵が失われても、過去の通信は危険にさらされません。
どこで機能しますか?
デスクトップクライアント間のOTR暗号化は、以下によってサポートされます。
- Adium(Mac OS X)には組み込みのサポートがあります。
- Climm(Unix)には組み込みのサポートがあります。
- Gajim(Microsoft Windows、Linux、FreeBSD)とサード開発者からのプラグイン。
- サード開発者からのプラグインを使用したirssi(Unix)。
- 第3開発者からのプラグインを使用したKopete(Unix)。
- Miranda IM(Microsoft Windows)とサード開発者からのプラグイン。
- Pidgin、以前はGaim、(クロスプラットフォームアプリケーション)と公式プラグイン。
- Psi +(Microsoft Windows、Linux)、第3開発者からのプラグイン。
- qutIM(Microsoft Windows、Linux、Mac OS X)とOTRプラグイン(libofftherecord)、これはqutIM自身によって作成され、「箱から出して」アクセス可能です。
- 第3開発者からのプラグインを使用したTrillian(Microsoft Windows)。
- 公式プラグインを備えたVacuum-IM(Microsoft Windows、Linux、Mac OS X)。
さらに、OSCARプロトコルの場合、プロキシを介したOTR形式のソリューションがあります(SOCKS5、HTTPSおよびHTTP接続がサポートされています)。
どのように機能しますか?
キー交換
OTRは、キー交換にDiffie-Hellmanプロトコルを使用します。 一般的に、このキー交換スキームは1976年に発明され、安全でない通信チャネルを介して通信するときに共有秘密キーを取得する最初の実用的な方法になりました。
![](https://habrastorage.org/storage2/077/fbe/511/077fbe511abc495dfd1043c5c0d28103.png)
アルゴリズムを実行するとき、各側は:
1.ランダムな正の整数a-秘密鍵を生成します
2.リモート側とともに、オープンパラメータpおよびgを設定します(通常、pおよびgの値は一方で生成され、他方に転送されます)。
-pはランダムな素数です
-gはpを法とする原始根
3.秘密鍵の変換を使用して公開鍵Aを計算します
A = g a mod p
4.公開鍵をリモート側と交換します
5.リモート側Bの公開鍵とその秘密鍵aを使用して、共有秘密鍵Kを計算します
K = B a mod p
Kは両側で等しい:
B a mod p =(g b mod p) a mod p = g ab mod p =(g a mod p) b mod p = A b mod p
実際の実装では、aおよびbについては、10 100の次数と10 300の次数のp が使用されます。
数gは大きくする必要はなく、通常は最初の10以内で問題になります。
認証
デジタル署名の場合、OTRはRSAアルゴリズムを使用します。これは、追加の認証ツールがないと、ユーザーが共有秘密キーを正確に誰と生成したかを確認できないためです。
![](https://habrastorage.org/storage2/bd7/c86/4c2/bd7c864c2a5c2cc22f2d34f853fd20f4.png)
したがって、送信者のアルゴリズムは次のようになります。
- 平文mを取る
- 秘密鍵{ d、n }を使用してデジタル署名sを作成します。
s = S a (m)= m d mod n
- メッセージと署名で構成される{ m、s }のペアを渡します。
受信者にとって、アルゴリズムは反対です。
- ペア{ m、s }を取る
- 送信者から公開鍵{ e、n }を受け取る
- 署名からメッセージのプロトタイプを計算します。
m '= P s (s)= s e mod e
- mとm 'を比較して、署名の信頼性(およびメッセージの不変性)を検証します
暗号化
暗号化のために、OTRはAESブロック暗号を使用します。 このアルゴリズムは十分に分析され、現在広く使用されており、最も一般的な対称暗号化アルゴリズムの1つです。 1998年に作成され、2001年に公開されましたが、現在ではどこにでもあります。 たとえば、AESサポートは、Intel Core i7-980X Extreme Editionからx86プロセッサファミリでIntelによって導入され、現在はSandy Bridgeプロセッサで導入されています。
その人気を考えると、キーを見つける方法に関する出版物がネットワーク上に定期的に登場しますが、それにもかかわらず、128ビットAES暗号化は依然として非常に信頼できます。
ハッシング
OTRは、1995年に開発されたSHA1(Secure Hash Algorithm 1)をハッシュアルゴリズムとして使用します。 任意の長さの入力メッセージの場合、アルゴリズムはメッセージダイジェストとも呼ばれる160ビットのハッシュ値を生成します。
理論的には、SHA-1はハッキングされたと見なされ(計算操作の数は2 80-63 = 131,000倍に削減されます)、実際には、このようなハッキングは何年もかかるため実行不可能です。 ただし、分散コンピューティングとGPUコンピューティングを使用すると、この時間を大幅に短縮できます。 既存のSHA-1およびSHA-2の代替品がすでに検索されています(将来の標準には「予期しない」名前のSHA-3が含まれます)。
OTRのSHA-1は、HMAC(ハッシュベースのメッセージ認証コード、つまりメッセージ識別ハッシュコード)の実装に使用されます。 HMACを使用する場合、取得した認証コードにより、信頼できるソースによって作成、送信、または保存されてからデータが変更されていないことを確認できます。
このタイプの検証では、たとえば、互いに信頼している2つの当事者が、自分だけが知っている秘密鍵の使用について事前に同意する必要があります。 これにより、ソースとメッセージの信頼性が保証されます。 このアプローチの欠点は明らかです。2つのパーティが相互に信頼する必要があります。
ミリオネア社会主義プロトコル
社会主義者の億万長者プロトコル(SMP)は、一般的な秘密を知って反対側を認証するためにOTRで使用されます。 このプロトコルを使用すると、参加者が一般情報(パスワード、自分だけが知っている質問への回答)を知っていることを確認できます。
![](https://habrastorage.org/storage2/f63/2c4/714/f632c4714422b1614e3e46a2e1d0be71.png)
中間者のMITM攻撃-部外者(攻撃者)が特派員が交換する自分の合意のメッセージを読み取り、変更することができ、後者は誰もチャネル内の存在を推測できない状況。
OTRはSMPを使用して、億万長者の「富」を比較するのではなく、2人の参加者の情報を比較します。 より正確には、2つのセッション識別子、参加者の公開キーのフィンガープリント、および「秘密」自体が比較されます。
どのように見えますか?
Gtalkなどのプロトコルを使用して安全なOTR通信セッションを開始するには、ロックを開いたままアイコンをクリックするだけです。
![](https://habrastorage.org/storage2/70b/fd9/279/70bfd927990c799c09893bcacf15fb64.jpg)
対話者のクライアントがOTRをサポートしていない場合、対話者は次のメッセージを受け取ります。
?OTR?V2?
%対談者名%がオフレコのプライベート会話を要求しました。 ただし、それをサポートするプラグインはありません。
詳細については、 otr.cypherpunks.caを参照してください。
神秘的なメッセージヘッダー?OTR?V2? OTRプロトコルの必要なバージョン-v2について説明します。
対話者がIM +(またはOTRをサポートする別のクライアント)を使用する場合、暗号化された通信セッションを開始する提案が表示されます。
「共有秘密」の交換後-両方の対談者のみが知っている秘密情報(別の通信チャネル-個人的な会議、電話、伝書鳩)を介してネゴシエートする必要があることは明らかです」、OTR通信セッションが開始されます。 OTRセッション中のメッセージ履歴は保存されません。
他に何を追加できますか? AndroidおよびiOS用のIM +クライアントのOTR機能は、アプリ内購入システム(「セキュリティ価格」)を介して、アプリケーションから直接アクティブ化できます。5米ドル、1回限りです。
OTRがサポートされている他のモバイルクライアントに会ったことはありませんが、コメントがある場合は情報を共有します。 ご清聴ありがとうございました:)
UPD1: Maemoの最新のqutIMもOTRをサポートしています。 これを行うには、Extras-develリポジトリからqutimおよびqutim-extra-pluginsパッケージをインストールします。
UPD2: xabber for AndroidはOTR暗号化もサポートしています。
UPD3:詳細については、 Wikipediaおよび公式OTRページを参照してください 。