気の向くままに辿るIT/ICT/IoT
Perl CGI

crypt Perl暗号化

ホーム前へ次へ
Perlで暗号化できるってホント?

Perlで暗号化crypt

cryptとは

 Perlにもcryptと言われる暗号化を行う仕組みがあります。

 perlの関数であるcrypt()は、UNIXに標準のDES暗号を利用した暗号化です。

 これは、ネットワークに送信するスクリプトで生成した値や入力データにおけるIDやパスワードといった一部のデータを暗号化するものです。

 基本的にcryptで暗号化されるのはスクリプトで生成した値や各種IDやパスワードなど日本語などの多バイト文字を含まない値であり、英数字や記号など文字種を増やし、文字数を多くするほど強度が増し、更に乱数を発生させ、暗号化の種といわれるランダムな値2文字を生成し、crypt暗号化を行い、更にハッシュに格納する場合もあります。

 解読する際には暗号を生成した際に利用した暗号化の種2文字を取り除いて解読し、再度cryptを利用して暗号化の種と値をそれぞれ比較し、一致を確認、true/falseの結果を受け取ります。

 仮に搾取された場合でも文字種と文字数を増やすことで解読に時間がかかりますが、それでも総当たりでパターンを抽出される場合PC性能が高ければ高いほど短時間で解読できてしまう可能性があるので乱数を発生させる事により規則性を持たない値を生成する事で解読を難しくし、その上で生の値を直接知ることのできない暗号をハッシュに格納することで値と一致するハッシュ名を逆参照する事ができないようにしています。

 これによりスクリプト作成者も生データを見る事ができないので暗号化強度自体は高くIDやパスワードの生成パターンが推測される危険性もほぼなくなりますが、サイバー攻撃の1つであるセッションハイジャックの内、暗号化されたままの値を使って本来のユーザーになりすます行為を防ぐ事はできません。

 このようにネットワーク上で盗み見られたりする危険は回避できません。

 ただし、CGIファイルを含めサーバ上のファイルは、ディレクトリを含む適切なパーミッションを設定していれば、管理権限を奪われサーバーに侵入されない限り中身を読むことすらできません。

 ファイアウォール対策等を施したサーバではこのファイルを読むことが多少困難であることから信頼性は高くなりますが、対策が不十分等でサーバに侵入されてしまうとプログラムソースやその他のファイルも読み取られる危険に晒され、cryptされたデータが解読される事はなくとも生成規則が知られてしまったり、ハッシュ名による参照等もできてしまいます。

 この為、ウェブサーバ自体のセキュリティ確保が重要である事は言うまでもありません。

 一方、電子データが狙われる場合の多くは、あるひとまとまりの不特定多数の膨大なデータまたは、特定の要人のデータを電子データの形で労せずして入手したいと考えているものといっていいでしょう。

 また個人情報漏洩事件のほとんどがネットワーク経由ではなく、人的・物理的に外部記憶装置に取り込んで持ち出されるケースが多いのも事実です。

 ただネットワーク経由で盗まれにくいのもサーバが堅牢だからでもあり、外部からの侵入や盗み見の防御をしているからというのも事実です。

 このようにcryptはそれほど簡単に見破られるものではないものですが、日本語を含む多バイト文字を含む場合は特にcryptで全てのフォーム入力値を暗号化する事は現実的ではありません。

 特に個人情報など重要なデータを保護をする為には、ウェブサーバに侵入されない対策を行うこと、ネットワーク上のデータを盗み見られないような対策を施す事が必要になります。

 こうした悪意をもったサイバー攻撃は不特定多数に行われる可能性があり、ネットワーク上を流れるデータは常に危険にさらされており、セキュリティの甘いウェブサーバほど侵入されやすいので狙われる危険性の大きい重要データや大量のデータを保持しているなどの場合には特にインターネット上の通信における安全性確保は必須の対策です。

 そこで世界中で利用され有効とされている手段が、SSLやこれを利用した技術です。

Perlプログラミング

Perl文法

ホーム前へ次へ