サイトアイコン CAD日記

データ暗号化レポート

【様々な暗号化方式】
共通鍵暗号方式と公開鍵暗号化方式の2種類がある。両者を組み合わせてハイブリット方式を用いる場合もある。
共通鍵は、暗号化と復号化で同じ鍵を使う。アルゴリズムがシンプルで素早く実行できるメリットあり。暗号化方式はDES、RC4、AESが有名で、現在の世界標準は、高い安全性からAES256となっている。
公開鍵は、暗号化と復号化で異なる鍵を使う。管理すべき鍵の数が少なくて済むのがメリット。データの証明に使う電子署名としての利用。暗号化方式はRSA、楕円曲線暗号が有名。

【身近な暗号化】
インターネット通信を暗号化するSSLが最も身近な暗号化。ユーザーが利用しているブラウザとサーバー間の通信を暗号化し、第三者による盗聴やデータ改ざんを防止可能。
zipにパスワードを付けると暗号化される。強度としてStandard ZIP 2.0とAES-256を指定できる。pdfも同様で、PDFバージョン1.7ではAES256に対応。古くはバージョン1.3時代にRC4 40bitだった。パスワード付きのzipやpdfを読み込むプログラムを作る際には、利用するライブラリがこれら暗号化方式に対応しているかが重要となる。
ドライブ丸ごと暗号化するならBitLocker。アタッシェケース、秘分などオリジナル系の暗号化ソフトもあり。

【案件概要】
アプリのライセンスを管理するための仕組みがある。アプリが必要になったら、オンラインでライセンスを取得して、不要になったら返却することが可能。ライセンスが特定マシンに固定化されないため、必要なアプリ本数が少なくて済むというユーザーメリットがある。アプリの不正利用をさせたくないというCADの文化から生まれた仕組み。詳細は省くが、要するにどのマシンでもアクティベーションができては困るので、ライセンス情報の暗号化と復号化を行う必要があった。

【C#による実装】
マネージドコードの代表格C#であれば実装は容易(アンマネージドコードのC++だと情報が少なく実装が困難)。
共通鍵暗号方式を採用するなら、AESの一択。アルゴリズムが完全にオープンにされており、多くの数学者や暗号研究家たちにより選考されているため。
暗号化方式がAESであれば、AesManagedクラスを利用する。キー長、ブロックサイズ、モード(CBC、CFB、CTSなど)、パディング(PKCS7、ISO10126など)、共通鍵、初期化ベクトルをパラメータで渡すのみ。
共通鍵がパスワードのことで、キー長さが128bitであれば16バイトの文字列を指定できる。

CBCモードでの初期化ベクトル(Initial Vectorを略してIV)が興味深い。ようするにキー(パスワード)のことで固定値にしておいてもよいが、AesManagedクラスのGenaerateIVメソッドで作らせて、暗号結果のファイルの先頭などに埋め込んでおく運用とすると、暗号化する度にランダムなデータ列となって、強度の高い暗号ファイルとなる。復号化時に、ファイル先頭のIVを読み込むことはもちろん必要。
暗号化の前後でのzip圧縮やbaase64でのエンコードを行うのも定石。暗号化時の順序を取り決めておき、復号化時に逆の手順を踏むことで正しく複合化することができる。これによって暗号化強度が高まる。

【参考URL】
『暗号化とは?方式・仕組み・アルゴリズムの種類・方法 – 復号化やハッシュ化の意味も解説』
『ZIPを暗号化する際に気にしたい強度とは。暗号化のメリット・デメリットも紹介』
『Visual Studio C#でファイルを暗号化してみる』

モバイルバージョンを終了