LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog

Blog


メッセージの安全性新時代:Letter Sealing

こんにちは。LINEでセキュリティに関する調査、開発を担当しているJIです。

今回の記事では、メッセンジャーアプリにおけるセキュリティについて、中でもネットワークを通じたメッセージの送受信時に想定される問題と、その解決のためにLINE 5.3より追加されたLetter Sealing機能についてご紹介します。

メッセージを安全に渡す方法

秘密情報のやり取りは太古の昔からずっと行われてきたことであり、人々は人通りの少ない場所に隠れて密かに内緒話をしたり、仲間内だけで通じる暗号を使って他人には解読不能にしたりすることで、秘密が漏れないようにしてきました。

しかし、このような方法は相手が近い距離にいる場合に限って使えるものでした。インターネットのような遠距離通信手段が存在しなかった頃は、文字を書いた文書を封筒に入れ、受取人へ人づてに渡す方法しかありませんでした。ただし、人が配達する過程でも、封筒をこっそり開封して中身を盗み見てから元通りに封をしてそのまま届けるという問題が発生しました。また、文書の内容を修正・改ざんして違う内容のものを渡されていたとしても、それを差出人が確認できる方法はありませんでした。そのため、差出人が書いた内容を配達員から安全に守りながら伝達することはとても難しいことでした。

そこで、人々は新しい方法を思いつきました。内容の秘密保持ができないならば、少なくとも誰が文書を作成したのか、誰かが途中で封筒を開封していないか確認できる印をつけるべきだと思うようになったのです。こうして誕生したのがシーリングスタンプ(letter seal)です。これは、伝えたい内容を書いた文書にしっかり封をした後、蜜蝋(wax)のようなもので完全に封印する方法でした。配達員が中身を見るには封蝋を破らなければならないため、受取人は封の状態を見て配達中の盗み見や内容の改ざんの有無を確認することができました。そして、破いた封を元に戻せなくするために、固有の文様が刻印された印璽(シール)を押しました。    

【図1】Letter Sealing

このように昔から使われてきた封印の仕組み(封蝋)は、配達中に発生し得る様々なリスクから文書を守る役割を果たしました。しかし、これは紙の文書でやり取りしていた時代に有効だった方法です。現代のようにインターネットを介して情報をやり取りするとき、中でもLINEでメッセージを送るときには、どのような方法でメッセージの安全性を保証しているのでしょうか。その方法について詳しく見てみましょう。

LINEが提供する基本的な暗号化方式

モバイル時代の現在、すべてのメッセンジャーサービスやSNSにはメッセージを送受信・保存するためのサーバがあります。サーバは、ユーザーから送られてきたメッセージやその他の情報を受信者に転送する役割をします。受信者にすぐ送れない場合は、サーバはそのメッセージを一定期間保存し、ユーザー宛に新規メッセージが届いたことをプッシュ通知(push notification)でお知らせします。

メッセンジャーサービスにおいては、サーバに送られてくるメッセージの安全性を保証するための暗号化が非常に重要な技術となります。LINEでも、サーバに送られてくるユーザーの様々な情報に対して、第三者による不正アクセスを遮断するため、メッセージの暗号化を実施しています。ユーザー端末のメッセンジャーとサーバとの間の暗号化通信の流れを簡単に図で表すと、下図のようになります。

【図2】現在のLINEのメッセージ転送

LINEでは、ユーザー端末(Sender)とサーバ(Server)間の通信を公開鍵暗号(public key encryption)方式を使って暗号化しています。ユーザーに対してLINEアプリを提供する際、暗号化ができる公開鍵のみをアプリに入れて提供し、ユーザー端末とサーバが接続されたときだけLINEサーバでのみ解読できる暗号化された安全なチャネルを作ります。このとき通信内容は暗号化されますが、サーバ内では一度復号された後、再度暗号化するため、(サーバ内では)一度平文に戻されることになります。

【図3】LINEにおけるRSA暗号化の仕組み

現在LINEではRSAという公開鍵暗号化方式を使用しています。LINEでのRSAの使い方を少し詳しく説明しましょう。

ユーザー側のLINEアプリ(クライアント)には、サーバが発行したRSA鍵を使用してデータの暗号化に使う暗号化鍵値を共有します。この鍵を利用してデータを暗号化すると、第三者はメッセージを見ることができなくなります。この方式が安全だといえるのは、RSAの秘密鍵がLINEサーバでのみ保管される値であるためです。なので、LINEサーバがハッキングされて鍵が盗まれることや、管理者が万が一にも誤って鍵を漏洩させてしまうといった事態に対しては、依然リスクが残ってしまいます。

【図4】大量のメッセージ鍵の保存

そのため、この方式においては、サーバに保管されている暗号化鍵を安全に管理することが最も重要です。その一方で、インターネットサービスが日常生活に浸透している現在において、悪意を持った攻撃者の手法も日々変化し、その攻撃による一般ユーザーへの影響も拡大しています。なお、コンピューター技術の高度化に伴いハッキング技術も進化し、これまで経験しなかった様々な形のハッキング事件が発生しています。さらに、個人中心だった攻撃者の活動が集団化・組織化して攻撃の規模も大きくなり、相対的に安全だとされていたサーバへの攻撃事例も発生し始めています。そのため、より安全にサービスをお使いいただけるよう、リスクの再評価と対策が求められるようになりました。

このような流れもあり、LINEは発生し得る様々なセキュリティリスクの再評価を継続的に行い、メッセージ保護方式のさらなる強化を検討していました。その強化策の一つとして、昔使われていた封蝋を現代のデジタルメッセージの送受信にも導入することを考えました。つまり、LINEのサーバで大量生産された既存の封蝋を使うのではなく、各ユーザーが固有の封蝋を直接作って使うようにし、メッセージの安全性の強化を図りました。そして、このLINEの新しいメッセージ保護機能には「Letter Sealing」という名前をつけました。

Letter Sealing: 改善点

Letter Sealingという新機能は、果たして何を強化したものなのでしょうか。
まず、技術的に安全なアルゴリズムを使用して、送信者と受信者が安全な暗号化鍵を交換できるようにしました。Letter Sealingでは、既存のRSA方式による鍵交換ではなく、Diffie-Hellman(以下、DHという)方式で暗号化鍵を交換します。これは、暗号化鍵を暗号化して転送する方式ではなく、両者がお互い公開してもいい値を共有するだけで第三者には分からない値をオフラインで生成できる方式です。

メッセージを交換したい両者はDHの公開鍵と秘密鍵を用意し、LINEサーバを介して公開鍵のみを相手に渡すことで、メッセージを中継するLINEサーバにも分からない暗号鍵を生成することが可能になります。秘密鍵はクライアントにのみ保存され、LINEサーバに送られることはありません。

【図5】Diffie-Hellman暗号化ダイアグラム

DHについてもう少し詳しく説明しましょう。DHには、離散対数と楕円曲線計算の2種類の数学的技術を使った実装方法があります。Letter Sealingでは強力なセキュリティ方式として評価されている楕円曲線DH方式であるECDH(Elliptic Curve Diffie-Hellman)を使用しています。楕円曲線DHは、離散対数方式と既存のRSA方式に比べて小さいデータ量で高い暗号化強度を実現できます。Letter Sealingは、ECDHの導入によって暗号化強度が向上するだけでなく、データ量が小さいので鍵管理の効率性も高まるという、2つのメリットを享受することができます。

【図6】Letter Sealingの手順

DHにより送信者と受信者の双方が共有する鍵(共通鍵)を得た後は、AES-CBC-256アルゴリズムで暗号通信を行います。この暗号化方式を使用する上で重要なことは、暗号化の対象と暗号を解読する復号化の対象がすべて同じ鍵データを持たないといけないことです。ここで使用する値が上述のDH鍵共有方式によって得られた暗号鍵です。

このような方法で両者が得た共通の値、shared secretを共有した後は、メッセージデータを暗号化します。LINEの場合、先ほど説明したECDH方式で256Bits(32Bytes)の共有値を生成し、これを通じて暗号化に使う鍵値を作成します。その後、暗号化されたメッセージとそのときに使用した鍵データに関する情報を一緒に送ります。しかし、メッセージを単純に暗号化して送るだけでは十分なセキュリティ対策になりません。実際、インターネット上には、間に割り込んでメッセージの内容を読めなくしたり、改ざんしたりすることで送信を妨げる攻撃が存在します。

このような攻撃を防ぐため、Letter Sealingではメッセージ認証コード(Message Authentication Code、以下MACという)という機能を追加しました。これは、メッセージが送信される前の元のメッセージを暗号学的に要約しておき、後で受信者がこのMAC値と実際のメッセージの値を比較して一致しなければ、改ざんされたことを検知できる機能です。この方式を活用すれば、第三者によるメッセージの改ざんを受信者側で検知することができます。なお、MACは共有データを持っている送信者と受信者しか作成できないので、メッセージが手つかずであることを保証できます。

【図7】Letter Sealingによる転送

このような技術を基に、Letter Sealingは機能的にも既存の方式と差別化を図ることができました。代表的な差別化ポイントとして挙げられるのは、Letter Sealingでは、メッセージの暗号化などの管理主体がサーバからメッセージ送信者(sender)に変わったという点です。これにより、かつてサーバ上で行っていた復号、および再暗号化が不要、また技術的に不可能になりました。これにより、他ユーザーはもちろん、LINEサーバの管理者でさえ、メッセージの内容を解読(復号)することはできなくなりました。

以上より、新しい暗号化方式を使用すれば、メッセージ転送において、一度も平文に戻すことなく安全にデータを宛先へ送り届けられます。かつて文書を届ける際に封蝋で閉じて盗み見や改ざんを防いだように、この新しいメッセージ保護方式ではメッセージをデジタル封蝋して受信者に届くまで保護します。

Letter Sealingの使い方

ご紹介したLetter Sealingをはじめ、同時に追加されたセキュリティ機能は、通常の新規サービスとは異なり、一見既存の機能と大差が無いように感じられるかもしれません。確かに地味で実感されにくい機能なのですが※注1、この機能はLINEのセキュリティを確実に高めるものです※注2

なお、Letter Sealing機能を使用するには、以下のように設定する必要があります。 LINE 5.3.0以降のバージョンをお使いの方は、その他 > 設定 > トーク・通話にてLetter Sealingのオプションをご確認いただけます。LINEのiOS版・Android版でこのオプションをオンにするだけで、Letter Sealing機能が使えるようになります。

【図8】Letter Sealing機能の設定

なお、本機能を段階的に適用拡大すべく、まずはAndroidユーザーのうちWindows、Metro、Mac、iPad、Chrome版LINEを使ったことのない一部の国のユーザーを対象に、9月よりLetter Sealing機能をデフォルト有効状態にして適用しています。Letter Sealing機能をオプションでオンに設定している、またはデフォルトで有効になっているAndroidユーザーであれば、1:1トークでテキストメッセージと位置情報をやり取りする際にLetter Sealing機能のメリットを享受することができます。ただし、この機能はオンに設定したユーザー同士でのみ使えるようになっています。そのため、この機能を活用したい方は、一緒にトークしたい友だちにもこの新機能を紹介して使用できるようにしてください。

今後、LINEでは、さらなるセキュリティ向上のため、他の形態のメッセージやグループトークなどにも適用する予定ですので、これからもLINEとサービスのセキュリティに一層のご支援ご指導のほどよろしくお願いいたします。

※注1: 現在のバージョンのLINEでは、会話中のトークルームがLetter Sealingモードであるかどうかは表示されません。今後のバージョンに適切な表示を追加することを検討しています。
※注2: 現時点では、Letter Sealingはテキストメッセージと位置情報に対してのみ適用されます。