ブログネタがない、ので暗号化を少し [プログラミング]
何かしていればなにがしか書くことはあるのだが、暑くて何もしてなくて書くことがない。まぁそろそろiPhoneの新製品が出るだろうし、MacBookかMacBook Airの新製品が出るだろうから、もう少しするとネタにも困らなくなるんだろうけど、それも何か他力本願な気がする。
今、暗号のAESを簡単に調べてソースとかねーかなと見てみたりしているのだが、あんまり有望そうなソフトもないっぽい。ECBという一番簡単にクラックできるものを実装しているものが多いような気がする。それを使うならオレオレ暗号化の方がいくらかまともかもしれないと思うのだけれども。
そもそも3DESとかどんなもんかとか分かっていないのに、AESも何もあるもんかいという事もあろうかとは思うのだが、今更使ってないDESのアルゴリズムを理解するのも面倒なのでやらない。というか、基本的に暗号化ってコンピューターになっちゃうと鍵と暗号化されるデータのXORがほとんどなんだろうと思っちゃうんだけどね。
鍵データの適用が分かってしまわないように、いい感じにどうシャッフルするかとかそういう事なんだろうけど、実装の面倒くささはいいにしても、暗号化復号化のコストは重要なところなんだろう。あまり重すぎる処理というのもどこでも使えるようにはならないからね。処理の重さと処理速度は案外大事だろう。
AESにはいくつかモードがあって、基本的な処理は同じかと思うが、最終的に違う暗号化くらいにやっていることが違うっぽい。
・ECB (Electronic CodeBook mode)
・CBC (Cipher Block Chaining mode)
・CFB (Cipher FeedBack mode)
・OFB (Output FeedBack mode)
・CTR (CounTeR mode)
とあるらしい。これは本で読んだ。
推奨されるのはCBCモードかCTRモードらしい。その他は何らかの脆弱性があるっぽい。でも最悪ECBモードを使わなければいい程度だろうと思われる。
ともあれ、ECBモードは基本だと思うので、習作的に実装してみたいとは思っている。それとCBCとCTRを実装すればいいかな。暇があったら3DESとかエニグマとか半分シャレでインプリしてみようかと思ったり。まぁ先ずはAESということで。AESが終わったらRSAに行くのだろうけど、RSAはデカい素数が必要だろうから実装しても暗号強度が云々というのは分からないかもしれない。まぁ小さい素数でも復号できれば実装を確かめるには問題ないだろうが。
こういうものは本家に情報を求めるのが一番なんだな。
https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/archived-crypto-projects/aes-development
というか、最近一次情報をぶんどってきてアフィリエイトに役立てるだけのような奴が多くて困る。まぁ人の事言えんけど、単なる再録みたいなのはやりたくはない。
あ、本家にC言語のリファレンスコードがありやんの。
https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/aes-development/rijndael-unix-refc.tar
これをコンパイルしてGolangの実装に役立てたい。最初はC言語でやろうと思っていたのだけれど、本家でやってたんじゃ意味ないし。とりあえず今度は上のコードレビューをしてみようかなと思ったり。なんか本気になってきたぞ。職業にはもう何にも関係なくなってしまったがなw。
今、暗号のAESを簡単に調べてソースとかねーかなと見てみたりしているのだが、あんまり有望そうなソフトもないっぽい。ECBという一番簡単にクラックできるものを実装しているものが多いような気がする。それを使うならオレオレ暗号化の方がいくらかまともかもしれないと思うのだけれども。
そもそも3DESとかどんなもんかとか分かっていないのに、AESも何もあるもんかいという事もあろうかとは思うのだが、今更使ってないDESのアルゴリズムを理解するのも面倒なのでやらない。というか、基本的に暗号化ってコンピューターになっちゃうと鍵と暗号化されるデータのXORがほとんどなんだろうと思っちゃうんだけどね。
鍵データの適用が分かってしまわないように、いい感じにどうシャッフルするかとかそういう事なんだろうけど、実装の面倒くささはいいにしても、暗号化復号化のコストは重要なところなんだろう。あまり重すぎる処理というのもどこでも使えるようにはならないからね。処理の重さと処理速度は案外大事だろう。
AESにはいくつかモードがあって、基本的な処理は同じかと思うが、最終的に違う暗号化くらいにやっていることが違うっぽい。
・ECB (Electronic CodeBook mode)
・CBC (Cipher Block Chaining mode)
・CFB (Cipher FeedBack mode)
・OFB (Output FeedBack mode)
・CTR (CounTeR mode)
とあるらしい。これは本で読んだ。
推奨されるのはCBCモードかCTRモードらしい。その他は何らかの脆弱性があるっぽい。でも最悪ECBモードを使わなければいい程度だろうと思われる。
ともあれ、ECBモードは基本だと思うので、習作的に実装してみたいとは思っている。それとCBCとCTRを実装すればいいかな。暇があったら3DESとかエニグマとか半分シャレでインプリしてみようかと思ったり。まぁ先ずはAESということで。AESが終わったらRSAに行くのだろうけど、RSAはデカい素数が必要だろうから実装しても暗号強度が云々というのは分からないかもしれない。まぁ小さい素数でも復号できれば実装を確かめるには問題ないだろうが。
こういうものは本家に情報を求めるのが一番なんだな。
https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/archived-crypto-projects/aes-development
というか、最近一次情報をぶんどってきてアフィリエイトに役立てるだけのような奴が多くて困る。まぁ人の事言えんけど、単なる再録みたいなのはやりたくはない。
あ、本家にC言語のリファレンスコードがありやんの。
https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Standards-and-Guidelines/documents/aes-development/rijndael-unix-refc.tar
これをコンパイルしてGolangの実装に役立てたい。最初はC言語でやろうと思っていたのだけれど、本家でやってたんじゃ意味ないし。とりあえず今度は上のコードレビューをしてみようかなと思ったり。なんか本気になってきたぞ。職業にはもう何にも関係なくなってしまったがなw。
タグ:暗号化
コメント 0