#author("2020-02-29T13:37:24+09:00","default:inoue.ko","inoue.ko") #author("2026-07-28T16:38:54+09:00;2026-07-28T13:58:49+09:00","default:inoue.ko","inoue.ko") *暗号 Cryptography|秘密通信を行うための方法や装置に関する科学 ~ ***暗号化の目的 私たちが日頃使っているインターネット通信は、いくつものサーバを経由してデータが転送されていて、当然、その途中のサーバやネットワークで、データの中身を見られたり、内容を書き換えられたりする危険があるわけです。これら情報セキュリティーに関する問題を防ぐための技術が暗号化です。第三者に見られても内容が分からないように「暗号化」すること、また、相手が本当の相手なのかを確かめる「認証」が必要になります。 情報に関するセキュリティ問題は主に以下のように整理できます。 -盗聴(機密性)> データの暗号化によって防止 -改ざん(完全性)> メッセージ認証やデジタル署名によって防止 -なりすまし(正当性)> 認証局による認証によって防止 ~ ***暗号方式 -古典的な暗号 古典的な暗号は鍵を使うのではなく、暗号化のルールを共有する方法。一度バレたら二度と使えないので、現代の通信には使えませんが、例えば、あなた自身がパスワードをメモするときなどには、有効な手段です。ルールを知っているあなたにしか、本当のパスワードが読み取れないからです。 --換字式暗号:別の文字を割り当てる。単一換字、多表式換字などがある。 例) [[シーザー暗号>Google:シーザー暗号]]:アルファベットを一定文字数分 シフト --転置式暗号:文字を並べ替える。 -現代の暗号 それに対し現代の暗号は、アルゴリズム自体は秘密にせず(逆にアルゴリズムを広く公開することで信頼性を十分に検討できる)、「鍵」とアルゴリズムで暗号化する発想を採用しています。 --共通鍵暗号:暗号化・復号で同じ鍵を使う。 --公開鍵暗号:暗号化・復号で異なる鍵を使う。 参考: -[[暗号の歴史|三菱電機>http://www.mitsubishielectric.co.jp/security/learn/info/misty/]] -[[暗号生成ツール「暗号くん」>http://ango.satoru.net/]] ~ ***共通鍵暗号方式 暗号用と復号用に同じ鍵を用いる方式です。 -扉の鍵を共有するのと同じで、処理が早いのが特徴です。 -ユーザー別に鍵を生成する必要があります。 -相手へ鍵を届ける際には、安全な受け渡しが必要になります。 ~ ***公開鍵暗号方式 暗号用の鍵と復号用の鍵が異なる方式です。 -暗号に使用するのは「公開鍵」。誰にでも鍵をかけられるという意味では「[[南京錠>GoogleImage:南京錠]]をイメージするといいでしょう。 -復号に使用するのは「秘密鍵」。秘密鍵は「南京錠を開ける鍵」をイメージするといいでしょう。 -公開鍵は全てのユーザーで同一の鍵を使用するのが一般的です。 -暗号化したデータを復号できるのは秘密鍵を所有している人だけなので、通信の安全性が保たれます。 -事前に鍵を配布・取得すできるのがメリットですが、共通鍵に比べると処理は遅くなります。 ~ ***SSL/TLS通信 SSL/TLS通信は主に共通鍵暗号で通信を行います。しかし、共通鍵暗号方式では、暗号側と復号側で同じ鍵を所有する必要があります。通信を行う前に一方が他方へ鍵を渡さなければなりません。 そこで、まずは公開鍵を使って共通鍵を暗号化して相手に送り、その後は相互に共通鍵を使う・・という手順がふまれます。 もっとも典型的なのは、普段Webを閲覧する際につかう HTTPS 接続です。まず接続先のサーバーが本物であるかは、認証局が発行した「サーバー証明書」によって確認できます。次に、サーバーが公開している「公開鍵」をつかってクライアントが「共通鍵」を暗号化して送ります。これを復号できるのは「秘密鍵」を持っているサーバーだけ。よって、以後は送られた共通鍵による安全な通信が可能になります。 参考: -[[HTTPS>Google:HTTPS]]:Hypertext Transfer Protocol Secure -[[SSH]]:Secure Shell ~ ***関連用語 -認証(Authentication) 本人を確認する(個人や組織の同一性を保証する)方法 なりすましを防止するための方法 認証局によって発行された、認証書を使用 -認証局(Certification Autority) サーバー証明書を発行する第三者機関 -認証書(Certificate) 公開鍵が本人のものであることを認証局のデジタル署名で証明したもの -デジタル署名 データの改ざんがないことを証明する手段。公開鍵暗号方式を利用 -DES(Data Encryption Standard) 共有鍵暗号化方式の一つ データを64ビット単位に区切って処理するブロック暗号 -ECC(Elliptic Curve Cryptography) 楕円曲線暗号 楕円曲線上の離散対数問題 (EC-DLP) の困難性を安全性の根拠とする -MD5(Message Digest Algorithm 5) 入力に対して128ビットのハッシュ値を出力するハッシュ関数 -[[RSA>https://ja.wikipedia.org/wiki/RSA%E6%9A%97%E5%8F%B7]](Rivest Shamir Adelman) 公開鍵暗号化方式の一つ 桁数が大きい合成数の素因数分解の困難性を安全性の根拠とする -[[SSH]](Secure Shell) リモートログインでコンピュータを遠隔操作するツール -ハッシュ関数 あるデータからそのデータを要約する数列を生成する演算手法のことで、暗号化や誤り・改ざん検出などに使われます。以下で試すことができます。 https://design.kyusan-u.ac.jp/OpenSquareJP/?cmd=md5 https://design.cs.kyusan-u.ac.jp/OpenSquareJP/?cmd=md5 -ソルト(Salt) パスワードをハッシュ関数に入れる前にパスワードの前後に付加するダミー文字列のことです。通常のパスワードのハッシュ化では、レインボー攻撃(予め任意の文字列をハッシュ値に変換しておき、標的のパスワードのハッシュ値と比較することでパスワードを推察する手法)によってパスワードが破られることがあります。そこで、ダミーデータをパスワードに付与してから非可逆処理を行えば、同じパスワードであっても、算出されるハッシュ値は違ったものになるので、パスワードは解析されにくなることが期待できます。 ~ ~ ~