i have no idea

I have no idea

bibouroku

やる気の出ない情報セキュリティ4 「暗号技術~公開鍵暗号化技術~」

会社で情報セキュリティをやることになったので勉強がてらメモ
参考書籍は「マスタリングTCP/IP 情報セキュリティ編」

公開鍵暗号化技術

公開鍵暗号化技術の代表はRSAと呼ばれるものがあげられます。

公開鍵暗号化技術では、公開鍵と秘密鍵を用います。   公開鍵は、鍵の生成者が多くの人に配布するもので、それを用いて暗号化するための暗号化鍵となります。
秘密鍵は、公開鍵で暗号化された暗号文を復号できる唯一の復号鍵です。所有者がこっそり管理するので秘密鍵と呼ばれます。

RSAとは

RSAは巨大な数の素因数分解が困難なことを安全性の根拠とした暗号化アルゴリズムです...(?)
RSAでは次の手順により公開鍵ペアを生成します。
① 大きな素数pとqをランダムに選びます。
② n=pqを求めます(nの長さが鍵長となります)
③ (p-1)(q-1)と互いに素な正の整数eを選びます。
④ ed = 1 (mod (p-1)(q-1)) となる正の整数dを求めます。
⑤ 公開鍵(暗号化鍵)として、eとnを公開します
⑥ dは秘密鍵として、安全に管理します。pとqは破棄します。

(暗号化) C = Me mod n
(復号) D = Cd mod n

復号演算は、鍵の生成時に利用した素因数p,qを知らないと演算するのが困難らしいです。
よくわからないので、必要になったときに理解しましょう!

RSA以外の公開鍵暗号化方式には、エルガマル暗号や楕円曲線暗号(ECC)といったアルゴリズムが利用されています
エルガマル暗号は、離散対数問題の困難さを安全性の根拠としたもので、楕円曲線暗号は、楕円曲線状の離散対数問題の困難さを安全性の根拠とした暗号技術です。
(ちんぷんかんぷんですが、数学的に立証が困難な問題を安全性の根拠としているんですね。。。)


また、公開鍵暗号化技術は、ディジタル署名でも使われており、それで利用可能なDSA(Digital Signature Algorithm)等のアルゴリズムがあります。

RSA共通鍵暗号化方式と比較すると処理速度が遅いので、一般的には暗号化したい平文はAES等の共通鍵暗号化方式で暗号化し、その暗号化鍵をRSAで暗号化する。 ハイブリッド暗号と呼ばれる方式がとられることが多い見たいです。

鍵共有アルゴリズム

ハイブリッド暗号方式も暗号鍵を安全に共有する仕組みですが、ほかにも鍵を共有するアルゴリズムがあります

Diffie-Hellman鍵共有アルゴリズム (DH鍵共有アルゴリズム) は、盗聴者がいることが想定されるインターネット等の通信路で、暗号化鍵を交換するための技術です。
SSL/TLSIPsec等でも利用されています。

DH鍵共有アルゴリズムをインターネットで利用する際は、中間者攻撃(MITM攻撃)攻撃に対して脆弱であることを知り、メッセージにディジタル署名を施すなどの対策する必要があります。

f:id:yabicon:20210511193703p:plain
DH鍵共有アルゴリズム

ハッシュ関数ディジタル署名

ハッシュ関数とは、任意の長さのデータを固定長のデータに圧縮する関数hashのことを指します。以下の性質を持ちます

  • 一方向性
  • 第2現像計算困難性
  • 衝突困難性

一方向性は、出力値から入力値を算出するのが困難であるということです。

第2現像計算困難性とは、同じハッシュ値となるような別の入力を求めることが困難であるということ

衝突困難性とは、同じ出力値を生成する2つの入力値を発見することが困難であるということです。


ハッシュ値はメッセージダイジェストとかフィンガープリントとも呼ばれます。
ハッシュ関数は、基本的に、任意の長さのメッセージを決められた長さへと拡張し、それを入力として非線形関数などで構成される処理を複数のラウンドにわたって繰り返すという処理を行っていて、
MD4、MD5、SHA、SHA-1、SHA-2、SHA-3等の種類があります。SHA-3以外はすでに安全性が疑問視されているので利用を避けることになってます...!

情報セキュリティではハッシュ関数は秘密情報の保存や、改ざんの検知で利用されます。

f:id:yabicon:20210511193739p:plain
ハッシュ関数でパスワードを保存するおとこ


ディジタル署名とは、メッセージに対するハッシュ値秘密鍵で暗号化し、メッセージの改ざん検知、及び否認防止を実現する仕組みのことです。

ディジタル署名の流れ
① 署名者(文書作成者)は公開鍵Pと秘密鍵Sを用意し、公開鍵を署名の検証者に安全に渡しておきます。
ハッシュ関数を用いて、送信したい平文Mのハッシュ値Hを求めます
③ 署名者は、あらかじめ用意しておいた秘密鍵Sを用いて、ハッシュ値Hを暗号化します。→署名値Hs
④ 平文であるメッセージMと署名値Hsをセットで検証者に送ります。
⑤ 検証者は平文Mからハッシュ値H'を求めます。
⑥ 署名者の発行した公開鍵Pを用いてHsを復号し、ハッシュ値Hを求めます。
⑦ 検証者は、署名から求めたハッシュ値Hと、メッセージMから求めたH'が一致するかどうかを確認します
⑧ 一致した場合、メッセージMは署名者によって作成されたことを確認できます

f:id:yabicon:20210511193823p:plain
ディジタル署名

ディジタル署名では、公開鍵暗号化方式として何を使い、ハッシュ関数として何を使うかで、組み合わせがいくつか想定できます。

暗号技術における安全性

様々な異なる種類の暗号技術に対して、同一の尺度で安全性を評価するために、等価安全性という概念がNISTによって定義されています
各暗号技術に対して、最も効率的な攻撃を行った際に、解読に必要となる計算量を評価値とします。(計算量が2xの場合、xビット安全性)

また、暗号アルゴリズムがどんなに協力でも、利用する際に何らかの誤りがあると、簡単に解読されてしまうケースもあります。

  • 独自に発明した暗号アルゴリズムを使用してはいけません。できるだけ安全とされている暗号アルゴリズムを選定します
  • 安全性を損なう可能性があることを考慮して設計する。鍵長128はでかいから64でええやろ。。とかはしない
  • 実装のみすで安全性が損なわれる可能性があることを考慮する。

アルゴリズムの安全性だけでなく、設計、実装の安全性を考慮します。