PHPで公開鍵暗号を使ってみる!
こんばんわ~keitaです!
今回は、公開鍵暗号方式をPHPで触っていきたいと思います!
公開鍵暗号方式とは?
公開鍵暗号方式というのは、2つの鍵(公開鍵、秘密鍵)を使用した方法です。
前提として、公開鍵は、秘密鍵で暗号化されているものです。
その公開鍵で、元のデータを暗号化します!
そうしますと、元データを確認(複号)するには、公開鍵の暗号元、秘密鍵を持っていなければならないということになります!
まとめると、公開鍵は誰にでも渡してもOKで、秘密鍵は誰にも渡してはいけないものとなります!
下の絵が簡単な流れになります!
有名なものとして、RSAがあります。
大きな数字を素因数分解させることの困難さや複雑さを暗号化するのに応用しているのがこの暗号の特徴です!※詳細は省きます!うまく説明できません。。
電子署名(SSL証明)や通信の暗号化等、とても大事なところで活躍してくれている暗号です!
PHPで公開鍵暗号方式を使ってみる!
用意されている関数はこちらです。
引用:PHP: openssl_public_encrypt - Manual
openssl_public_encrypt — 公開鍵でデータを暗号化する
openssl_public_encrypt(
string$data
,
string&$encrypted_data
,
OpenSSLAsymmetricKey|OpenSSLCertificate|array|string$public_key
,
int$padding
=OPENSSL_PKCS1_PADDING
): bool
プログラムを書く前に公開鍵と秘密鍵を作成しておく必要があります!
私は、Ubuntuで作成しました。
秘密鍵の作成
openssl genrsa > ファイル名
公開鍵の作成
openssl rsa -in 秘密鍵のファイル名 -pubout -out ファイル名
これらで作成された公開鍵と秘密鍵のファイルをPHPで使用していきます!
実際に暗号化と復号を試してみる
作成した画面が下記になります。
これまで作成してきた暗号の画面を編集しながら使っています!
暗号化した結果と復号した結果を同時に出力させています!
決してテキストを表示させただけではありません。。
ちょっとわかりにくくなってしまいましたが、できました!
これまで3つの暗号に関してブログで触れましたが、しっかりとしたアルゴリズムが使われているなと感じました。
ただ、暗号化を使用していれば情報の保護はできているかと言われると、決してそうではないので、当たり前のこと(情報リテラシー)は怠らずに守っていくことが一番大事かもしれませんね!
ここまで読んでいただきありがとうございました!
summarized in English
This blog summarizes what I tried using public key cryptography in PHP.
I think It's so strong algorithm.
but I don't believe that data can be protected as long as it is encrypted.
In terms of protectiong information, I think it is very important to protect information literacy.