LINEのE2EE実装「Letter Sealing」初見

LINE 5.3で追加された機能として、超音波による友達追加の他に、Letter Sealingという機能が追加されているということです。

Letter Sealingの説明は以下のようになってます。

より安全にトークを楽しむためのLetter Sealing機能を追加 (この機能は特定の国や地域でのみ利用可能です)

尚、LINE Engineer’s Blogの記事によると

LINE 5.3.0からは、さらに強化された暗号化方式のE2EE(end-to-end encryption)として「Letter Sealing」機能をご利用いただけます。次回の記事では、「Letter Sealing」について詳しくご紹介します。

とのことですので、そのうち詳細の解説がなされると思うので、この記事はあくまでも現時点で見える範囲で話を進めていることにご留意ください。(公式情報が投稿され次第、加筆などはする予定です。)

この機能、説明が全くなされずに登場した機能でGoogleで検索してみるとベータ版のヘルプらしきものがヒットし、その内容として「Letter Sealingとは」という項目があります。

Letter Sealingとは、トークルームのメッセージにエンドツーエンド暗号化を適用したサービスです。
※エンドツーエンド暗号化(End to End Encryption)とは、サーバー上でもメッセージの内容が暗号化された状態で保存されており、送信者と受信者以外には対話内容を判読できないように設計された通信方式です。

トーク送信者と受信者が互いにLetter Sealingをオンに設定している場合、よりセキュリティが強化されたメッセージを送受信することになりますが、トークルームでは通常どおりトークの閲覧ができます。

なお、Letter Sealingをオンに設定後、WindowsやMAC OSなどPCでLINEを利用する場合は本人確認が必要となります。

End to End Encryptionというのは発信者と受信者の間で暗号化を行う手法のことで、正しく実装されている限り、第三者による監視が困難になる通信方式です。前にタイマートークというのが実装されましたが、方式的にはそれと類似しているようです。(ただし、タイマートークは日本、中国では使用できないようです。)

Letter Sealingの設定は、トーク設定画面から行えるようになっていました。(いつの間にか行えるようになっていました。尚、「特定の国や地域」がどこを意味しているのかはわかりません。)

Letter Sealing設定
Letter Sealing設定

説明には「メッセージは高度な暗号化により保護されます。Letter Sealingは友達がその機能を有効にしている場合に限りトークで利用できます」とあります。この説明によると、トークで何らかのオプションが有効になるかと思ったのですが、双方でこの二つをオンにした状態でメッセージを送信すると、普通に送受信されます。(暗号化のオプションなどは見当たらず、ただ単に通常のメッセージとして表示される。)

ところが、Chrome版のLINEでログオンすると警告が表示されます。

Chrome版LINEでの表示
Chrome版LINEでの表示

Letter Sealingが有効になっていると、一部のメッセージが表示されない場合があります。
この機能を無効にするには、携帯電話版LINEで[設定]>[トーク]>[Letter Sealing]に進んでください。

つまり、Chromeアプリ側では暗号を復号化する鍵を持ち合わせていないので開けないということでしょう。これはタイマートークでもそうなので想定内でした。反対にこれで開ける作りになっていると実装を疑わざるを得なくなります。(なぜなら、もしChromeアプリ側で復号が可能である場合、サーバを経由して秘密鍵を転送していることになるので、結果としてサーバ側がメッセージを読むことができてしまうわけです。)

上記ですでに送信していたメッセージは次のような表示に置き換えられていました。

ChromeでのLetter Sealingメッセージ表示
ChromeでのLetter Sealingメッセージ表示

[Letter Sealing]

ご利用の端末では[Letter Sealing]に対応していないため、このメッセージを表示できません。
モバイル端末の[設定]>[トーク・通話]で[Letter Sealing]の設定を変更してください。

つまり、先に送ったメッセージは暗号化されて送られていたわけです。つまり、本質的にはLetter SealingはOpportunistic Encryption(日和見的暗号化)ということになるようです。(暗号化できる場合は暗号化する方式、この方式自体はメールサーバ同士の通信などにも使われています。)ただいくつかの疑問というか問題点が……。

  1. ユーザーはどうやって暗号化された、ということを確認するのか? 方式的に双方が有効にしていないと作動しない機構であることもあり、暗号化されるのであればその旨が通知されなければ使い物にならないのではないか。。(鍵マークなどを表示した上で、暗号化が有効になった時点、無効になった時点でユーザーに告知すべき。これをしないと全く意味がない。)
  2. どのようなペイロードが暗号化されるのか。当該のメッセージが暗号化されていることを確認する少し前に送ったスタンプや写真はChromeアプリからも読み取ることができた。(つまりスタンプや写真に関しては暗号化されていない。)このあたりも全くユーザーに告知されていない。
  3. 複数人のトークの場合は暗号化されるのか。またはその場合はどのような方式になるのか。こちらはちょっと機構的に複雑な部分。でもTextSecureでは実現できてるけど……。

詳細については公式の解説を待ちたいところですが、ぱっと見たところではちょっと疑問が残るシステムでした。特にユーザーにそのステータス(状態)の表示がないのはまずいです。タイマートークであればタイマートークを使っていることが一目瞭然にわかりますが、今回のLetter Sealingでは、何が、いつ暗号化されているかという表示が全くないですし、そういったことが明示されないのが致命的です。また、設定方法に関しても、設定画面以外のところから有効にできるようにしないと、わざわざトーク設定まで行って、Letter Sealingをオンにするユーザーはまずいないのではないかと思います。