暗号化とハッシュの基礎(gpg・sha256sum)
「ハッシュ」と「暗号化」は似ているようで役割がまったく違います。ハッシュは改ざん検知の指紋、暗号化は鍵がないと読めなくする仕組みです。この記事では、sha256sumによるダウンロード検証、gpgによる共通鍵・公開鍵暗号の考え方、SSH/TLSが守る通信とLUKSが守るディスクの違い、そしてパスワードを平文で置いてはいけない理由を整理します。
「暗号化しておけば安心」という言葉をよく聞くが、実はハッシュと暗号化は目的がまったく異なる技術だ。この違いを理解しないまま使うと、守れているつもりで守れていない状況に陥りやすい。
この2つを混同すると、「ハッシュ化したから中身も隠れている」といった誤解や、「暗号化したから改ざんされていないはずだ」といった誤解につながる。まずは役割が別物だと切り分けて覚えておく。
🔖 ハッシュ=改ざん検知の指紋
ハッシュとは、どんなデータでも入力すると決まった長さの文字列(指紋のようなもの)を出力する計算のことだ。同じ入力からは必ず同じハッシュ値が出て、逆にデータが1ビットでも変われば、ハッシュ値はまったく別のものに変わる。
この性質を使って、ファイルが配布元と同じ中身かどうかを検証できる。代表的な計算方式の一つがSHA-256で、これを計算するコマンドがsha256sumだ。
🔐 暗号化=鍵がないと読めない
暗号化は、データを鍵を使って別の見た目に変換し、対応する鍵がなければ元に戻せなくする技術だ。ハッシュと違って「元に戻す(復号する)」ことが前提になっている点が大きな違いになる。
暗号化の考え方には大きく2種類がある。1つは共通鍵暗号で、暗号化するときと復号するときに同じ鍵(パスワードのようなもの)を使う方式だ。もう1つは公開鍵暗号で、暗号化用の鍵(公開鍵)と復号用の鍵(秘密鍵)がペアになっており、片方で暗号化したものはもう片方でしか復号できない。
gpgコマンドは、この両方の暗号化方式を扱える定番ツールだ。GnuPGというソフトウェアの略で、多くのLinuxディストリビューションに標準で入っている。手軽に使えるのが共通鍵方式(対称暗号)で、-cオプションを付けて実行する。
gpgでは公開鍵と秘密鍵のペアを作って運用することもできる。送信者は相手の公開鍵で暗号化し、受信者は自分だけが持つ秘密鍵で復号する、という流れになる。ここでは考え方の紹介にとどめる。
復号したいときはgpg -dに暗号化済みファイルを渡す。共通鍵方式ならパスフレーズを、公開鍵方式なら対応する秘密鍵を持っていることが求められる。
🌐 通信の暗号化とディスクの暗号化は別物
「暗号化」とひとくくりにされがちだが、実際には「どこを守るか」で仕組みがまったく異なる。既存トピックで扱ったSSHや、Webでよく使われるTLSは、通信経路上でデータを盗み見・改ざんされないようにする仕組みだ。データが目的地に届いて保存された後は、この暗号化の範囲外になる。
一方、ディスクの暗号化(LinuxではLUKSという仕組みが代表的)は、ストレージそのものを暗号化する。パソコンやサーバーが盗まれた・ディスクを抜き取られた、といった物理的な持ち出しに対して効果を発揮する仕組みで、通信中の盗聴には関与しない。
つまり、通信は暗号化していてもディスクが平文のままなら、機器を持ち去られたときに情報が漏れる。逆にディスクを暗号化していても通信が平文なら、盗聴のリスクは残る。守りたい対象に応じて両方を組み合わせるのが基本になる。
自分のサーバー構成を思い浮かべ、通信経路とディスクのそれぞれに暗号化の手当てがあるかを一度棚卸ししてみると、抜け漏れに気づきやすい。
🚫 パスワードは平文で置かない
ここまでの内容を踏まえると、設定ファイルやスクリプトの中にパスワードをそのまま書く(平文で置く)ことがなぜ危険か見えてくる。ファイルが誰かの目に触れた瞬間、ハッシュ化も暗号化もされていない生の文字列がそのまま読めてしまう。
ハッシュで確かめ、暗号化で守り、守る場所ごとに手段を使い分ける。この3つの感覚があれば、「暗号化しているから安心」という思考停止から一歩抜け出せる。