Contiランサムウェア集団の暗躍とAnonymousの活躍が話題なので
時事ネタです。
自分の担当するサービスがこのような標的になってはたまったものではないので、これまで適当にしていたセキュリティをしっかりと学んでいこうと思います。
暗号鍵・公開鍵あたりを適当に聞き流していた程度の知識しかないので基礎からしっかりと身につけたいです。
書いている人のスキル感としては業務として多少サーバーに触れる程度で、セキュリティは多少書籍読んだり聞きかじりの知識くらいしか無い程度です。
学校のセキュリティの授業で確か一番最初は暗号技術の体系を学んだような記憶があるのですが、とりあえずシーザー暗号を復習してみます。
シーザー暗号とは
ローマ帝国の皇帝ユリアスシーザーが平文と呼ばれる元の文章を3文字ずらして暗号としたことが命名の由来。文字をずらすことからシフト暗号などとよばれる暗号の元祖です。
書籍や文章だけではイメージがイマイチつかめない体質ですので、セキュリティの基礎を無料かつハンズオンで学べるEnvaderを利用していきます。
カエサル
セキュリティ基礎、暗号とは
ざっくりと言うと情報を伝達したい相手以外には(なるべく)読ませないための仕組みです。
セキュリティ基礎コースで元祖暗号であるシーザー暗号をまずはやってみます。
シーザー暗号の仕組み
文章の文字をROT{n}ずらします。例えば元々のシーザー暗号は3文字ずらしていたためROT3と表現します。元の文章がAIUEOならROT3はDLXHR、ROT13だったならNVHRBといった具合に。
そしてこの数字部分が暗号を解く鍵そのものとなっています。
ROT13なら暗号化はアルファベット順を右に13シフトします。
復号化の仕組み
暗号を元の文章に戻すことを復号といいます。
ROT13だった場合はアルファベットを左に13シフトすると平文に復号できます。
シーザー暗号はn文字ずらす暗号なので、n部分の鍵がわかればすぐに復号できます。わからなくても総当りすればいずれ復号が可能です。
暗号がFHRPUPRBだった場合は、簡単ですねn文字ずらせばいいだけですから……。(10分経過)
わかったYAKINIKUだ!ROT7だ!
思ったよりは大変で、もし仕組みを知らなかったとしたら時間稼ぎにはなるようです。
trコマンドで変換できる
Linuxではtrコマンドを使うことで簡単にシーザー暗号(ROT13)を作ることが出来ます。
echo 'YAKINIKU' | tr A-Za-z N-ZA-Mn-za-m
LNXVAVXH
アルファベットは26文字のため、ROT13の場合は暗号化したものをもう一回ROT13すると復号できちゃいます。
echo 'LNXVAVXH' | tr A-Za-z N-ZA-Mn-za-m
YAKINIKU
いずれ解読されるものの
暗号の仕組みさえわかっていれば暗号というものは解読されてしまうわけですが、相手に情報が漏洩するのを遅延することができるという点で今日の暗号化とそう仕組みは変わりないようです。
ハンズオンで教わること
シーザー暗号の仕組みや、シェルスクリプトやPythonでシーザー暗号を作れるようになります。
ですが実際のハンズオンでは自力でシーザー暗号を解読するためかなり頭が疲れてしまう……
つまり暗号を自力で解くのはめんどくさいからプログラムで解決しようという動機づけを学べますw
シーザー暗号を学習して得た知識
いや文字ずらしただけとか解読するの簡単じゃんとは思っていたのですが、実際にシーザー暗号化された文章を解読していくのは脳に負荷がかかって疲れます。
とはいえ時間さえあれば解読できるし、プログラムで簡単に解読できるため今となっては暗号の用途をほぼなさず陳腐化しています。
日進月歩する暗号技術など、引き続きどうすればセキュリティを保てるかを今後学んでいきたいと思います。
参考
暗号・復号を容易にできるサイト
Discussion