- LINEの「レターシーリング」では、送信者・受信者の2人だけが共有する秘密鍵を、Diffie-Hellman方式で生成し、メッセージの暗号化と復号を行います。
- それ以前のメッセージはLINEサーバでいったん平文にしていた送り直す方式でした……。
- ちなみに、LINEの「レターシーリング」では、楕円曲線Diffie-Hellman方式。
まぁ、従来が怖い話ではあるんだけどね。
1. レターシーリングとは?
「レターシーリング(Letter Sealing:封蝋)」は、LINEが提供するメッセージ保護機能です。
この機能は、メッセージの送受信時のセキュリティを強化するために、より高度な暗号化技術を使います。
Letter Sealing(レターシーリング)とは、LINEでトークルームの参加者以外の人にトークの内容が分からないようにするための「エンドツーエンド暗号化」という技術を利用した機能です。
Letter Sealing(レターシーリング)とは?
ポイントは、暗号化の鍵をそれぞれのユーザーが持つことです。
「レターシーリング」の意味は、「手紙を蝋で密封すること」です。
昔は秘密の手紙を保護するために、蝋(ろう)で密封する方法が採られていました。
蝋には独自のハンコを押して、破いても戻せないようにしました。
以前は オン・オフ変更できましたが、今は必ずオンです1。
2. 「レターシーリング以前」のLINEのセキュリティ(公開鍵暗号化方式)
レターシーリングがない場合でも、LINEのメッセージは「通常の暗号化」によって保護されてきました。
メッセージが傍受されたり、偽メッセージが入って来たりするのを防ぐためです。
LINEメッセージの送受信・保存はLINEサーバが担っています。
LINEサーバの役割は、ユーザーが送信したメッセージを相手に転送すること2。
もし、メッセージをすぐに受信相手に送れない場合は、一定期間サーバで保存し相手にプッシュ通知します。
このLINEメッセージのやり取りは、「RSA」という公開鍵方式で保護しています3。
LINEアプリをインストールしたときに、利用者ごとの鍵情報がスマホに保存されているのです。
それぞれの鍵で暗号化することで、
- 送信者のスマホ → LINEサーバ、
- LINEサーバ → 受信者のスマホ
の間を、第三者による傍受や改ざんから保護しています。
「RSA暗号」は、1977年にロナルド・リベスト、アディ・シャミア、レオナルド・エーデルマンによって提案されました。
非対称暗号方式の一つで、公開鍵と秘密鍵のペアを使用します。
- RSAでは、公開鍵を使ってデータを暗号化し、
- そのデータを受信した人は秘密鍵を使ってデータを復号します。
公開鍵は誰にでも共有できますが、秘密鍵は受信者のみが保持します。
RSA暗号化は、データの暗号化とデジタル署名に広く使われ、メッセージの機密性と真正性が保証します。
2-1. 公開鍵暗号化方式の問題点
LINEのメッセージ中継方法では、送信者は LINEに向けて 暗号化してメッセージを送っています。
LINEサーバで再び受信者用に暗号化し直しています。
再暗号化のためにLINEサーバでいったん復号化する点に、セキュリティとプライバシーの問題があります。
もし、ハッキングや情報漏えいによってLINEサーバの秘密鍵が盗まれると、第三者にメッセージが解読されてしまうおそれがあるからです。
実際に、LINEはしばしば情報漏えい事件を起こしているよね……。
私的なメッセージなのに、「LINEに向けて」に送る仕組みがおかしかったのです。
3. レターシーリングではユーザーが鍵を持つ
そこで考えられたのが、暗号化の鍵をそれぞれのユーザーが持つことです。
レターシーリングは、LINEサーバの秘密鍵を使うのではなく、各ユーザーがそれぞれの鍵を作れるようにするものです。
暗号化キーをサーバではなくユーザー端末に保存することは、「エンドツーエンド暗号化」の核心的な部分。
通信のプライバシーとセキュリティを強化するためで、ユーザー間での通信内容が第三者(サービス提供者を含む)によって読み取られることを防ぎます。
ただし、端末にキーを保存するデメリットとして、キーの紛失や端末の交換時にデータにアクセスできなくなるリスクがあります。
3-1. Diffie-Hellman方式で鍵のペアを生成する
しかし、暗号化されたメッセージを復号化するには、鍵が必要だよね。
LINEサーバに仲介してもらわずに、どうやって相手の暗号鍵をもらうの?
Letter Sealingでは、各ユーザーのクライアントデバイス上で鍵ペア(公開鍵と秘密鍵)を生成します4。
ECDH鍵共有(楕円曲線Diffie-Hellman鍵共有)方式では、公開鍵は相手に送信されますが、秘密鍵はクライアントデバイス内に保存されます。
Letter Sealingでは、「Diffie-Hellman方式」で暗号化キーを共有しています。
Diffie-Hellman方式には、離散対数と楕円曲線計算の2種類の数学的技術を使った実装方法があります。
LINEのレターシーリングでは、「楕円曲線Diffie-Hellman鍵共有(ECDH)」の方を使っています。
3-2. キーフィンガープリントは公開鍵のハッシュ値
ユーザー固有の「キーフィンガープリント」というのは公開鍵のようなものなのかな。
実際の公開鍵はもっと長いデータだと考えられます。
一般に、公開鍵暗号での「フィンガープリント」は、公開鍵を識別するための短いバイト列のことをいいます5。
具体的には、公開鍵にハッシュ関数を適用したものが「フィンガープリント」です。
「フィンガープリント」は元の鍵よりも短いので、鍵の管理作業を単純化できます。
「ハッシュ関数」とは、入力データから出力データは容易に計算できるが、出力から入力を逆算するのが極めて困難な性質を持つ一方向性の関数です。
任意の長さの入力データを固定長の出力データ(ハッシュ値)に変換します。
代表的なハッシュ関数としては、SHA-256, SHA-3, BLAKE2などがあります。
4. 共通鍵暗号化方式
LINEのレターシーリングでは、送受信する相手同士で共通の暗号鍵を持ちます。
お互いの情報から共通鍵を計算できたら、「AES-CBC-256アルゴリズム」で暗号通信をします6。
共通鍵で暗号化し、共通鍵で復号化できます。
「AES(Advanced Encryption Standard)」は、米国国立技術研究所(NIST)が1998年に採用したブロック暗号。
ブロックサイズは 128ビット固定で、鍵長は 128, 192, 256ビットから選択できます。SSL/TLS や ZIP, 7z の暗号化でも利用されています。
「CBC(Cipher Block Chaining)」は、前ブロックの暗号化の結果を、次ブロックとXORをとったものを暗号化します。
ブロックの内容が同じでも異なる値になるので、解析されにくくなります。
4-1. 改ざんチェックのための「メッセージ認証コード」
共通鍵によって傍受を防ぐことができるようになりました。
しかし、すり替えによる改ざんについてはまだ安心できません。
そこで LINEでは、共通鍵でメッセージを暗号化するだけでなく、さらに「メッセージ認証コード」を追加して送っています。
この「メッセージ認証コード」は、大ざっぱに言えば、共通鍵と元メッセージから別のアルゴリズムで計算したハッシュ値です。
暗号化メッセージに「メッセージ認証コード」を添付して送ります。
受信者はまずメッセージを復号化し、それから自分でも共通鍵でハッシュ値を計算します。
これが添付されているハッシュ値と同じなら、「改ざんされていない」と判定できるのです。
「チェックサム」みたいな感じだね。
ただ、ここまでの説明でよくわからないのは、じゃあどうしてパソコンでLINEにログインしてメッセージが読めるんだろう、ということです。
復号化したメッセージが端末内にしかないなら、パソコンにはメッセージがないような気がするのですが、実際には読むことができます。
5. 秘密鍵は基本的に長く使う仕組み
通常、E2EEの鍵は、ある時点で秘密鍵が漏洩しても、暗号化された過去のメッセージは保護するために、定期的に更新される仕組みになっています。
しかし、Letter Sealingでは「前方秘匿性には未対応」とのことで、基本的には 同じ鍵を継続して利用しています。
「キーフィンガープリントもユーザー固有の値」ということになっています。
5-1. アカウント引き継ぎ時の鍵の転送
スマートフォンの機種変更などでLINEアカウントを引き継ぐ際には、古い端末から新しい端末へLetter Sealingの鍵を転送する必要があります4。
安全のため、引き継ぎ元と引き継ぎ先の端末でそれぞれ一時的なECDH鍵ペアを生成し、QRコードを介して公開鍵を共有することで、端末間に暗号化された通信路を確立します。
Letter Sealingの鍵は、ECDH鍵共有から生成した鍵でAES256-GCMにより暗号化した上で、古い端末から新しい端末へ送信されます。
5-2. 鍵のバックアップ
ユーザーはLetter Sealingの鍵をバックアップできます4。
スマートフォンを紛失した場合でも、暗号化されたメッセージにアクセスできるようにするためです。
たとえば、バックアップしたトーク履歴を復元するためにも秘密鍵が必要です。
Letter Sealingの鍵は、ユーザーが設定した6桁のPINコードから生成されたキーを用いて、Client-Side Encryption (CSE) により暗号化されます。
暗号化された鍵はSGX (Software Guard Extensions) で保護されたサーバーに保存され、エンドツーエンドで暗号化が行われます。
(補足)
- 現在LINEでは、より安心安全にトークルーム内のメッセージをやり取りしてもらうため、レターシーリングの設定をオンの状態で提供しています。- Letter Sealing(レターシーリング)とは?
- LINEが提供する基本的な暗号化方式 – メッセージの安全性新時代:Letter Sealing
- 現在[2015-10-13]LINEではRSAという公開鍵暗号化方式を使用しています。 – メッセージの安全性新時代:Letter Sealing
- LINE Transparency Report – LINE Corporation
- 指紋 (公開鍵暗号) – Wikipedia
- DHにより送信者と受信者の双方が共有する鍵(共通鍵)を得た後は、AES-CBC-256アルゴリズムで暗号通信を行います- メッセージの安全性新時代:Letter Sealing