暗号には、「共通鍵暗号」「公開鍵暗号」「ハッシュ関数」の3つがあります。※ハッシュ関数を暗号に含めることには、議論がありますが。
1.共通鍵暗号
(1)共通鍵暗号について
・暗号する鍵と復号する鍵が同じである方式
・ZIPのパスワードで暗号化し、復号するのも共通鍵暗号。暗号化と復号が同じ鍵だから。
(2)シーザー(Caesar)暗号
・古くはシーザー(Caesar)暗号で、鍵となる値を13にするとROT13。※ROTはRotationの略
https://ja.wikipedia.org/wiki/ROT13
・CyberChefでやってみよう。
RecipeにROT13とし、Inputに変換したい文字を入れ、Recipeに処理を入れます。
https://gchq.github.io/CyberChef/
2.ハッシュ関数
(1)ハッシュ関数
・暗号化の一つともいえる。ただし、不可逆性(元に戻せない)
・MD5やSHA-1など色々あるが、古い方式はコンピュータの進化により、解読される可能性が高い。SHA-256などをハッシュから元のデータを探す
・パスワードもハッシュ化して保存される。
ためしに、shadowファイルを見てみましょう。
cat /etc/shadow
・パスワードを暗号化しておらず、情報漏えいした事件も発生
https://xtech.nikkei.com/atcl/nxt/column/18/00001/01661/
(2)ソルト
・ソルト(塩)を付加することで、復元を難しくしている。
・パスワードのファイル(shadowファイル)で確認しましょう。
#ユーザを作成。パスワードは同じ echo password | passwd --stdin user1 echo password | passwd --stdin user2 #しかし、ハッシュ値が変わっています。 cat /etc/shadow user1:$6$axBL.lN4$bVxFfRW./HXeVGOZrticDk94XZ6PNtKZ2V4AJXlqgxWpNrRla9./JwSxslhsmxUzeQ2SZ8HWyEcZLANNcsJ.h0:19374:0:99999:7::: user2:$6$5ziXSyug$bhnd/dTczpgeGxTKM6G2FKY5ZFRUZxWZ3oYOVidcSe8/cwbOk8q3n0fm1WeFAehrmqv4ZofasZ0cfgccw2UWs/:19374:0:99999:7:::
3.公開鍵暗号
・秘密鍵と公開鍵を使った暗号方式。
・RSA暗号がその代表
・RSAの仕組みは少し複雑です。
https://it-trend.jp/encryption/article/64-0056
4.エンコード
(1)エンコードについて
・エンコードとは、文字やデータをルールに基づき変換することです。
・パーセントエンコーディング:URLやHTTPヘッダには日本語や「<」などが使えないので、ASCIIコードに変換します。
URLエンコーディングとも言われます。
・BASE64エンコード:電子メールはもともと、ASCII文字を想定していて、日本語文字などは送れません。そこで、BASE64エンコードによって、英数記号と+、/に変換します。
(2)エンコードツール
・エンコードは、Windowsのコマンドプロンプトから、標準のコマンドcertutilでもできます。まあ、Webツールを使うのが便利でしょう。たくさんのサイトがありますが、以下のCyberChefがCTF利用者には人気です。
https://gchq.github.io/CyberChef/
Inputに変換したい文字を入れ、Recipeに処理を入れます。複数の処理を入れることも可能です。
たとえば、UTF-16LE(Encoding Text)に変換して、Base64(To Base64)をする場合は、2つを並べます。すると、Outputに処理結果が表示されます。処理については、左上にSearchがあるので、そこで処理を検索すると便利です。
5.PKI
・PKIは、デジタル署名と、証明書の理解が必要です。
・WEST-SECの証明書を見てみましょう。
https://west-sec.com
証明書の階層から、署名したのはISRG(=Let’s Encrypt)、件名にwest-sec.comが
記載。また、サブジェクトの公開鍵をみると、west-sec.comの公開鍵がわかります。
さらに、SHA-256指紋というのが、ディジタル署名です。