CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

データ暗号化レポート

投稿日:

【様々な暗号化方式】
共通鍵暗号方式と公開鍵暗号化方式の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#でファイルを暗号化してみる』

-ソフト開発

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

WinMergeで複数拡張子を対象とするファイルフィルタと簡単な行フィルタ指定をやってみた

WinMergeでファイル比較することは、SEだったらみんなやっていることと思う。でもファイルフィルタと行フィルタは使ったことがないと思う。おいらだって、何年もWinMergeを使ってきたけど、正規表 …

zipcopyが設計上まちがっていることを書いたがホントにそうかを調べてみた

以下にzipcopy Ver1.07開発中に気付いたことを転記する。 いろいろ直していて気付いたんだけど、そもそものところでこのソフトの設計思想があやまっていた。 ネットワーク上のサーバーにあるファイ …

no image

random

JavaScriptと格闘してみたよ。 テーマはランダム。 10個の画像の中から、任意の3個の画像をWebサイトに表示する、 ってのが要求仕様。 Math.floor(Math.random() * …

no image

軌道に乗ったか!?

 この11月の売り上げ本数が、10本の大台にのりました。私が最も力を入れているCAD関連ツールがです。喜ばしいことです。関係各位への感謝がつのります。  思えば半年前、あるユーザーの要望から始まったこ …

PDFアレコレはiTextSharp7も組み込むことにする

PDFiumViewerを使ってPDFアレコレという名のフリーソフトを作ってみたわけだが、PDFiumViewerの限界が見えてきた。