Web Connectivity and Security in Embedded System�Cryptography Module 概要和訳
上野未恵
2020/9/4
暗号化システムの概要
暗号化する目的
悪意のある他者から重要な情報(プレーンテキスト※)を隠し守るため
※プレーンテキスト:暗号化されていない平文、いわゆる文字データのこと。
暗号化アルゴリズム
復号化アルゴリズム
暗号鍵
復号鍵
プレーンテキスト
プレーンテキスト
暗号文
悪意のある他者
送信者
受取人
暗号化アルゴリズム
復号化アルゴリズム
暗号鍵
プレーンテキスト
プレーンテキスト
暗号化~復号までの流れ
①暗号化アルゴリズム
インプット:プレーンテキスト、暗号鍵
アウトプット:暗号文
復号鍵
暗号文
②復号化アルゴリズム
インプット:暗号文、復号鍵
アウトプット:プレーンテキスト
送信者
受取人
悪意のある他者からデータを守るためには、
復号鍵の情報をいかに外部に漏洩させないための仕組みがポイントになる。
暗号化システムの種類
②公開暗号方式
・暗号鍵 ≠ 復号鍵
・復号鍵(秘密鍵※)は暗号鍵の情報だけでは特定が困難
※秘密鍵:受取人しか持っていない秘密の復号鍵
①共通暗号方式
・暗号鍵 = 復号鍵
・復号鍵は暗号鍵から得られる
☆復号鍵の情報を漏洩しないための対策
⇒復号鍵を送受信する際には暗号化された通信を使うこと
共通暗号方式の種類
①ストリーム暗号
・プレーンテキスト(データ)を1bit単位もしくは1byte単位で暗号化していく
・暗号化されたデータは小さく、受信後はリアルタイムに復号される
→リソースに制限のある組み込み機器への使用は適している
☆ストリーム暗号のセキュリティ対策
⇒暗号化する際は(疑似的)乱数をディジット※を使用
※ディジット:データに誤りがないことを確認するための値
②ブロック暗号
・プレーンテキスト(データ)を一定の単位で暗号化していく
・暗号化されたデータは一定量貯めてから復号される
→リアルタイム性が要求されるケースには不向き
☆ブロック暗号の種類
⇒DES、AES、3DESなど
☆復号化のモード
⇒CFB、ECB、CBCなど
想定される攻撃の対象
①暗号文のみ
・暗号化されたデータにアクセスするパターン
②知られたプレーンテキスト(平文)
・暗号文と相互関連している平文を狙うパターン
③一部のプレーンテキスト
・攻撃者は暗号化プロセスにアクセスし、狙いを定めたプレーンテキストに対する暗号文を
生成するパターン
④一部の暗号文
・攻撃者は復号化プロセスにアクセスし、狙いを定めた暗号文に対するプレーンテキストを
生成するパターン
☆いずれの攻撃も目的は秘密鍵(復号鍵)を見つけることである
☆攻撃者が秘密鍵を見つけるまでの時間は、プレーンテキストを暗号文にする時間よりも長い
Wifiのセキュリティの概要
なぜセキュリティを考える必要があるか
対策せずにデータが無線で送信されることは、悪意のある他者にデータを傍受されてしまう
可能性があるため
Wifi(無線LAN)における暗号化プロトコルの種類
①WEP
・1999年にIEEE802.11で規格化された暗号化方式
・脆弱性が見つかり、現在は使用されていない
・RC4暗号化アルゴリズムを使用
②WPA
・2003年に規格化されたWEPの改良版
・RC4暗号化アルゴリズムの他、TKIP暗号化方式が追加
③WPA2
・新たにCCMP暗号化方式が採用されている
WEPにおけるRC4暗号化アルゴリズム
RC4暗号化
・24bitの初期化ベクトル(暗号化結果をばらつかせるためのランダムに生成されるビット列のこと)
・誤り検出符号の一種であるCRCを使用
24bit
初期化ベクトル
キー
RC4
CRC
プレーン
テキスト
初期化ベクトル
キーID
暗号文
24bitのランダムに生成された初期化ベクトルとキーを用いてRC4のキーストリームが生成される
キー(ストリーム)
公開暗号方式の概要
特徴
・暗号鍵 ≠ 復号鍵
・暗号化/復号に使用される鍵:
(受信者の)公開鍵 ⇒ 暗号鍵
(受信者の)秘密鍵 ⇒ 復号鍵
アルゴリズムとプロトコルの種類
・RSA暗号
次の3つの役割を担う
・公開鍵・秘密鍵生成
・暗号化
・複合化
・DH(Diffie-Hellman)法
DH法自体は暗号ではない
鍵交換を安全に行うアルゴリズムとして使用されている
・EEC(楕円曲線暗号)
RSAに比較して小規模なキーサイズの公開暗号鍵アルゴリズム
処理の高速化、消費電力の削減、メモリ節約につながるため組み込み機器での利用が多い
RSAアルゴリズム(全体像)
前提:公開鍵も秘密鍵もそれぞれ2つの値をもっている。2つの値の一方は公開鍵・秘密鍵で共通の値
公開鍵:(e, n)
秘密鍵:(d, n)
①公開鍵(暗号鍵)の生成
・2つの素数乱数p、qを用意する
・公開鍵(秘密鍵も同様)がもつ2つの値うち1つの値nをpとqの積で算出する
・(p-1)(q-1)の値φ(n)と対になる公開鍵のもう一つの値eを決定する
②秘密鍵(複合鍵)の生成
・秘密鍵のもう一つの値dを公開鍵の値eとφ(n)から求める
③暗号化と復号化
・平文をm、暗号文をcとしたとき、下記の通り暗号化/復号化できる
暗号化:c=m^e mod n
復号化:m=c^d mod n
RSAアルゴリズム(公開鍵の生成)
①素数乱数p、qの生成
・素数乱数p、qは1,024bitもしくはそれ以上の長さを持つ
例)p=5、q=11とする
②公開鍵の値nとφ(n)を算出する
・n = p * q
・φ(n) = (p - 1)*(q - 1)
※p,qは1でないこと!
例)n = 5 * 11 = 55
φ(n) = 4 * 10 = 40
③公開鍵のもう一つの値eを決定する
・φ(n)の最大公約数の組み合わせを用いたとき、eは剰余が1になる値である
gcd(e, φ(n)) = 1
φ(n)の最大公約数の組み合わせ
φ(n)をeで割ると剰余が1になる
例) φ(n) = {1,2,4,5,8,10,20,40}
e → 3,7,9,11,13,19,21,23,29,31,37,39
※今回はe=7と仮定する
RSAアルゴリズム(秘密鍵の生成と暗号化・復号化)
④秘密鍵の値dを算出する
・e*d = 1 mod φ(n)
例)d = 23
⇒e*d = φ(n) + 1 = 4 * 40 +1 = 161
e*d = 7 * 23 = 161
以上で公開鍵と秘密鍵は次の通りになる。
公開鍵(e, n) = (7, 55)
秘密鍵(d, n) = (23, 55)
⑤暗号化を行う
・c = m^e mod n
例)m = 8とする
⇒c = 8^7 mod 55 = 2097152 mod 55 = 2
⑥復号化を行う
・m=c^d mod n
例)m = 2^23 mod 55 = 8388608 mod 55 = 8
公開鍵基盤PKI(Public key Infrastructure)
PKIとは
公開鍵による暗号化技術を用いてソフトウェア、ハードウェア、ユーザ等に対して
セキュリティ対策を実現する基盤のこと
PKIを構成する2つの機能:
・公開鍵
・ディジタル証明書
公開鍵暗号の目的:
①データの完全性
データが改ざんされていないことを保証する
②認証
ネットワークにおいて送信者が誰なのかを証明することで、不正侵入や
なりすましを防止する
③否認防止
ある人がとった行動を証明し、否定できなくする
④守秘性
特定の相手のみとのコミュニケーションを保証する
デジタル署名
デジタル署名とは
・データの機密性・否認防止・完全性を保証するドキュメントのこと
・メッセージに対するダイジェストを署名者の秘密鍵で暗号化したものを指す
デジタル署名の作成~送信の流れ
メッセージの
ダイジェスト
受信者の公開鍵
プレーンテキスト
送信者
ハッシュ
受信者
暗号化
暗号化
送信者の秘密鍵
デジタル署名
①ハッシュで関数で
ダイジェスト作成
②送信者の秘密鍵でダイジェストを暗号化して
デジタル署名作成
③受信者の公開鍵で
メッセージを暗号化
④暗号化したメッセージに
デジタル署名を付加して
送信する
デジタル署名
デジタル署名をもつメッセージの復号の流れ
メッセージの
ダイジェスト
プレーンテキスト
ハッシュ
受信者
デジタル署名
①受信者の秘密鍵で
メッセージを復号
②送信者が使用した同じ
ハッシュ関数を用いて
ダイジェストを算出
③デジタル署名を送信者の公開鍵で復号
④メッセージのダイジェストを比較
同一であれば送信者が誰かを証明できる
復号化
送信者の公開鍵
復号化
受信者の秘密鍵
メッセージの
ダイジェスト
デジタル認証
認証局(CA)
・公開鍵と対応する秘密鍵の所有者を結びつける証明書(公開鍵証明書)を発行する第三者機関
・受信者が受け取った公開鍵が本当に正しい公開鍵であることを証明することができる
(不正侵入やなりすましを防ぐため)
デジタル認証のしくみ
認証局CA
送信者
受信者
①認証局に送信者のID情報や公開鍵を送付
送信者のID情報・受信者の公開鍵など
公開鍵証明書
復号化
認証局の公開鍵
送信者のID情報など
②認証局は送信者のIDを特定
送信者の公開鍵と追加情報を含む証明書を発行
③送信者に公開鍵証明書を
送付
④受信者に公開鍵証明書を送信
⑤受信者は公開鍵証明書を
認証局の公開鍵で復号
トランスポート層のセキュリティ(TLS)
TLSとは
アプリケーション間でプライバシーとデータの完全性を保証するセキュアな通信のこと
TLSは元になったのがSSLのため、SSLと表記されることがある
TLSを実現するための2つのプロトコル:
①ハンドシェイクプロトコル
・共通暗号におけるユニークな鍵を各セッションで生成する
・クライアント-サーバ間で、リクエストの送信や認証、レスポンスのやりとりを
行うことで、セキュアな通信を開始する
②レコードプロトコル
・クライアント-サーバ間で通信を開始後、セキュアな通信を構築する
・MAC(Message Authentication code)を追加してデータの完全性のチェックを行う
・パケットを暗号化する