暗号: あなたが知りたくなかったことのすべて

急速にデジタル化が進む今日の社会では、暗号はデータセキュリティに不可欠です。しかし、この暗号というバズワードの裏には何があるのでしょうか。暗号を探検する旅に出ましょう。
暗号: あなたが知りたくなかったことのすべて

人類が初めて文字を使い始めた頃から、その文字は秘密にされてきました。もちろん、文字そのものではなく、そこに含まれるメッセージを秘密にしてきたのです。私たちが「暗号」と呼ぶものは、敵に対してメッセージを秘密にするためのものです。多くの場合、暗号化された文字列が使われます。約 4,000 年前の象形文字以来、このことは暗号の基本的な概念となっています。

デジタル通信や決済システムが発達した今日の世界では、データセキュリティを確保するために暗号の必要性が高まっていることは言うまでもありません。

実際に暗号は、ユーザーやその顧客のデータの安全性、オンライン決済システムとの通信の安全性、企業や政府機関のミッションクリティカルな機密性を維持するための心臓部となっています。セキュリティシステム開発の基礎となる標準モデルである機密性、完全性、可用性の 3 要素 (CIA) に不可欠であり、さらには人命を救うことにも役立ちます。

暗号は、秘密を守るためのすばらしい科学であるだけでなく、数学、科学、技術、政治、人権にまで影響を及ぼし、Salesforce では「信頼」という最大の価値に応えるために役立っています。また、仮想通貨や NFT と並んで、テクノロジー分野で最も注目を集める「バズワード」の 1 つでもあります。

既存の暗号標準が将来的に破られることへの懸念もあります。その原因となるのが、少し専門用語を使いますが、ポスト量子暗号です。暗号解読に必要なオーバーヘッドが大幅に減ることで、一部の暗号を解読できるようになるかもしれません。ただし、まだ先の話であるためそれほど心配する必要はありません。ここではまず、「これまで」と「これから」について説明します。

スーパーヒーローには原点となる物語がある

いつの時代でも、暗号は人命を救うために使われてきました。残念なことにその逆のケースもあり、暗号が悪用されたり、破られたりした結果、劇的で絶望的な出来事を引き起こしたこともあります。たとえば次のようなケースです。

シーザー暗号: ジュリアス・シーザーにちなんで名付けられた暗号 (一連の規則または 2 つ以上のアルゴリズムの組み合わせ) です。シーザーはこの暗号を使い、軍や帝国の公式メッセージを暗号化しました。3 回の移動、つまり平文をアルファベット順に 3 文字ずつずらして暗号文を出力します。すなわち、「trust」という単語は「wuxvw」という暗号文として出力されます。「W」は「T」の 3 文字後ろ、というような規則性です。

バビントン陰謀事件: 1587 年、スコットランド女王メアリーは投獄され、監禁されていました。外部との通信がほぼ不可能だったメアリーは、ノーメンクラター (文字と記号) から成る独自の暗号を作り、暗号を書いた羊皮紙をビール樽に入れ、仲間に送ることに成功しました。やがてこれは頻度分析 (最もよく使われる暗号文を特定し、それが何に帰結するかを推測すること) と呼ばれる手法で解読され、メアリーのエリザベス女王に対する反逆の企ては厳しい運命をたどることになりました。メアリーがもっと頻繁にノーメンクラターを変えていれば、彼女の命は救われたかもしれません。 

エニグマ暗号機: 第二次世界大戦中、ドイツ軍はこの機械式の暗号装置を使ってメッセージを暗号化し、意図せず盗聴者に解読されないようにしていました。複数のローターが付いたタイプライターが箱の中に入っていて、キーを押すとボードの端にある文字が点灯します。ここでの狙いは、「A」という文字を押すたびに同じ文字が 2 回連続しないようにすることでした。そのためローターによって箱の機械的配線を変更し、キーが出力する文字を変えていました。エニグマ暗号機はアラン・チューリングによって解読され、それによって第二次世界大戦が早期に終結し、無数の人々の命が救われたとされています。

仮面の裏側を覗く

以上の話が皆さんや皆さんのデータとどう関係するのかと思われるかもしれません。しかし、暗号技術のさまざまな時代が、最終的に今日のインターネット上での安全な通信方法と、脅威アクターから身を守る方法にどのようにつながっているかを理解することは重要です。暗号は技術であるだけでなく、今日のサイバーセキュリティの世界に大きく貢献した芸術です。さて、非常に複雑なテーマに飛び込む際には、いくつかの基本的な用語を理解することも同じく重要です。次に、ゼロから暗号の達人になるための基礎知識をいくつか紹介します。

平文: 純粋な原文の状態のメッセージ

暗号文: 平文メッセージを改変したもので、意図した受信者以外には (うまくいけば) 解読できない

暗号: 暗号化を実行するための明確な一連の手順。暗号アルゴリズム、または暗号化エンジンとも呼ばれる

暗号化: 平文を暗号文に変換する技術。平文を暗号化エンジンにかけること

復号: 暗号化の逆のプロセス

鍵: 暗号鍵とは、暗号アルゴリズム/暗号が平文を暗号文に変換するために使用するビット列のこと。暗号アルゴリズムの動作を制御し、暗号変数とも呼ばれる

鍵空間: 暗号アルゴリズムやパスワードなどのセキュリティ対策において、鍵に設定可能な値の総数。つまり暗証番号のような 4 桁の番号は、10,000 の鍵空間しか持たない。0000~9999 の数字では、10,000 通りで推測が可能

ハッシュ: 一方通行の可変入力関数。固定された暗号文の出力を生成する (詳しくはこのブログの後半で説明) 

ありふれた場所に潜むもの   

今日、私たちがインターネット上で使っているアルゴリズムと鍵は、何らかの理由でセキュリティを無効にしない限り、どこにでもあるものです。実際、これをブラウザーで読んでいる方は、検索バーの左側に鍵のマークがあることに気が付くはずです。このマークは、ウェブへの接続が安全であることを示すものです。そのセキュリティでは、お察しのとおり暗号が使われています。 

そのプロトコルは、具体的には SSL/TLS (Secure Sockets Layer/Transport Layer Security) のことです。ハイパーテキスト転送プロトコル (HTTP) を暗号化するために使います。このプロトコルを使うことで、インターネット上で情報を発信したり、ウェブサイトに情報を入力したりできます。これはメタデータと、フィールドに入力する値 (パスワードやクレジットカード情報など) の両方になります。しかし平文であるため、のぞき見れば誰にでも見えてしまいます。公開鍵暗号化を使ってウェブサイトとネゴシエイションすることで、ウェブサイトの証明書を利用し、暗号化され、認証された通信チャネルを作ることができます。公開鍵がウェブサイトのものであることは、認証局と呼ばれる機関で検証することで確認できます。

万物への鍵

世界で最も強力なアルゴリズムが手に入ったとしても、鍵はそれを施錠したり開錠したりするメカニズムでしかありません。誰かがあなたの鍵を手に入れたら、あなたのすべての通信を解読できてしまいます。鍵は暗号の心臓部であり、それを安全に保って自分だけのものにすることは、暗号システムを良好な状態に保つ上で非常に重要です。 

静止状態のデータ、たとえばディスク内に保存された大量のデータを暗号化する場合、対称鍵というものを使用します。これは 1 つの鍵ですべてを管理し、暗号化と復号を同じ鍵で行います。対称暗号化は、多くのリソースを必要とする大量の暗号化 (テラバイト単位の情報など) に適しています。現在、共通鍵暗号化に使われているアルゴリズム/暗号には、DES、3DES、AES などがあります。顧客のデータを保護する場合、これらの種類のアルゴリズムを使用してユーザーとその顧客のデータを安全に保護します。平文を暗号化エンジン (暗号/アルゴリズム) にかけ、そのエンジンに鍵を入れることで暗号化が行われます。車を走らせるのと同じように、エンジンをかけるために鍵が必要なのです。 

保存されたデータの暗号化については以上のとおりですが、私が通信回線を通してあなたと通信し、あなたに鍵を送る必要がある場合はどうでしょうか。実は、その通信ゲートウェイをのぞき見ると、秘密鍵を見ることができてしまいます。しかし、これを回避する方法があります。では、公開鍵暗号の世界に足を踏み入れましょう。 

対称鍵の場合、すべての処理に 1 つの鍵を使いますが、非対称暗号化では 2 つの鍵を使用します。この場合、計算のオーバーヘッドが大きくなるため、より多くのリソースを消費することになります。2 つの鍵のうち 1 つは公開鍵、つまり公共のインターネット全体から見ることができるものです。もう 1 つは秘密鍵で、あなただけが所有するものです。この 2 つの鍵が一致すると、復号が可能になります。 

たとえば、私があなたに通信回線を通して暗号化されたメッセージを送るとします。まず、あなたに連絡を取り、あなたの公開鍵を手に入れます。あなたの公開鍵を使って、あなたにだけ送るつもりのメッセージを暗号化します。繰り返しますが、あなたの公開鍵は誰でも知っていますが、あなたの秘密鍵にはアクセスできません。秘密鍵の持ち主以外は、誰もメッセージを解読できないのです。 

さて、これで暗号化の方法はわかりました。しかし、そのメッセージが本当に私から届いたものなのか、あなたはどうすれば信じられるでしょうか。 

鍵の使い方を逆にしてみましょう。私はあなたにメッセージを送ったことを証明し、メッセージと一緒に完全性を提供したいと考えています。結局のところ、通信回線の向こうにいる誰かが他の誰かのふりをしている可能性があります。このため、私があなたに暗号化されたメッセージを送る前に、あなたから私に、その完全性を検証してほしいと依頼します。ここで、私は自分の秘密鍵でメッセージに署名します。私の秘密鍵は私しか持っていないため、この鍵を使ってメッセージに署名すれば、私から届いたメッセージだということになるはずです。 

メッセージに署名するということの本当の意味は、そのハッシュを署名することを指します。ハッシュとは、固定された暗号文出力を生成する一方通行の可変入力数学で、メッセージダイジェストとも呼ばれます。たとえば、「Salesforce Rocks!」(Salesforce はすごい!) というメッセージの場合、ハッシュは次のようになります。 

cb3f2a6595c407552a961a9bb661371b62bea1dc55732eb032c2f5a49bf84272 

私がダイジェストを計算し、それを私の秘密鍵で暗号化することで、デジタル署名と呼ばれるものが作成されます。そしてあなたが私からハッシュを受け取ったとき、私の公開鍵とハッシュを照合し、一致することを確認できます。メッセージが途中で傍受された場合、ハッシュは変わる可能性があります。たとえば、大文字が嫌いなスパイがメッセージを傍受して「salesforce rocks!」に変更すると、固定された暗号文の出力はまったく別のものになり、次のようになります。 

80c7f510141d090a37b2865284fbe3593a911d9f81bcd2d80b5e2cc845e0dfc2

この場合、受信したメッセージは最初に署名されたものと異なっており、署名されたダイジェストと受信したダイジェストが一致しません。このため、否認防止 (否定することができない能力) が適用できない、つまり送信者やメッセージ自体の完全性が信頼できないことになります。もとの平文にわずかな変更を加えただけでハッシュ値が変化することは、暗号のアバランシェ (なだれ) 効果として知られています。

自分の秘密鍵でメッセージに署名し、受信者の公開鍵を使ってメッセージを暗号化することで、完全な非対称暗号化が行われ、通信チャネルが安全に検証されるため、非常に安全な通信を行うことができるます。非対称暗号化は、インターネット上のあらゆる通信経路で使用されており、最終的な受信者の信頼につながります。非対称暗号化アルゴリズムの例としては、RSA、DSA、楕円曲線などがあります。

さて、非対称暗号化はリソースを大量に消費するため、「ハイブリッド暗号」と呼ばれるものがあります。この場合、送信者は対称的なセッション鍵 (別名: 共有鍵) を生成しますが、その鍵を送信する前に受信者の公開鍵を受け取り、セッション鍵を暗号化します。その後、非対称鍵で暗号化して通信回線を通して送信し、受信者が秘密鍵で復号すると、セッション鍵 (例: 128 ビットAES) を使って暗号化通信が可能になり、両者は対称鍵の暗号化を高速に実行できるようになります。

正真正銘の安全性

すばらしいと思いませんか? ただし、誰かの公開鍵が本当にその人の公開鍵であるかどうか、どうすればわかるのでしょうか。先ほど受信者に要求した鍵は、送信したメッセージを暗号化するためのものだったことを思い出してください。ここからは、公開鍵基盤 (PKI) と認証局 (CA) の世界です。PKI はオンライン通信の暗号を支える目に見えないバックボーンだと考えてください。CA は基本的にサードパーティの暗号検証機関であり、ある人の公開鍵がその人のものであることを検証する機関です。この検証はデジタル証明書を使って行われます。 

コースを修了したり、スキルアップのための活動に参加したりして、その教育機関から「人物 A はこの教育機関の認定を受けていることを証明します」というスタンプが押された証明書を受け取るのと同じように、デジタル証明書にはあなたの公開鍵が含まれており、信頼できるサードパーティ機関によって発行されます。つまり、CA は本質的に「はい、この公開鍵は人物 A のものです」と言っているのです。 

あるウェブサイトにアクセスしたときに、「警告: ここにアクセスしないでください。証明書に問題があります」と表示されたことはないでしょうか。これが表示されるのは、その事業者が信頼できるサードパーティによって検証されている証明書を持っていないためです。ここで紹介したもの以外にも、秘伝のソースにはさまざまなものがありますが、以上が基本的な理解を得るための大まかな概要です。 

あなたにも、私たちにも空飛ぶマントはある

この話は、あなたと Salesforce にどんな関係があるのでしょうか。暗号は、あなたのデータの安全性と通信チャネルの安全性を維持するためのものです。Salesforce では数あるセキュリティ対策の中で、上のようなメカニズムを使って、顧客のデータを保存時と転送時の両方で安全に保っています。最も重要なのは、鍵の安全性を確保する方法である、ハードウェアセキュリティモジュール (HSM) があることです。HSM は暗号鍵を保管するために設計された特殊な暗号ハードウェアの集まりです。暗号鍵をサーバー上のファイルに保存するだけでなく、デバイス上で暗号鍵を計算することができるため、セキュリティがさらに強化されます。大量のデータをお持ちの場合は必ず、暗号化してください。超極秘の機密情報について誰かと通信する場合は、公開鍵暗号化を使って、安全かつ完全性を保って通信を行うようにしましょう。繰り返しになりますが、暗号は人命を救うのです。

あなたがサイバーセキュリティのキャリアを志していて、暗号についてもっと知りたい場合は、PKI と暗号について深く学ぶことを強くおすすめします。YouTube には Neso AcademyPico Cetef のようなすばらしいリソースがあります (ケルクホフスの原理などの概念について調べてみてください)。計算暗号の仕組みや、ブロック暗号とストリーム暗号などについては『Serious Cryptography: A Practical Introduction to Modern Encryption (本気の暗号学: 現代暗号実践入門)』という本に詳しく書かれています。また、公開鍵アルゴリズムの元祖の 1 つ (非対称の枠組みを使った対称鍵交換と言う人もいます) であるディフィー・ヘルマン鍵共有についても、調べる価値があります。

サイバーセキュリティに関するコースでは、安全な通信に関するモジュールも用意されています。また、ステガノグラフィという概念もあります。これは、メッセージをありふれた場所に隠すものです (犬の写真の中にシェイクスピアの全作品をこっそり忍ばせることもできます)。ステガノグラフィは、データ損失防止 (DLP) の敵になる可能性があります。また、いつでも相談を受け付けていますので、もっと知りたい方は LinkedIn でメッセージを送ってください。ぜひお話ししましょう。

おすすめの事例