Skip to content

Shaw02/CMS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CMS(RFC.5652 & PKCS#7)対応 暗号/復号ユーティリティ

概要(Summary)

本ソフトについて

単一ファイルに対して、暗号・復号を行うソフトウェアです。 本ソフトウェアは、暗号化ファイルの構造や、各種のアルゴリズムについて、 国際的な標準類(ITU, Fips, PKCS, JIS, RFC等)に準拠しており、 これらに準拠している他のソフトウェアと互換性があります。 暗号化ファイルは、暗号メッセージ構文(CMS:RFC.5652)に準拠しており、以下の特徴があります。

- 疑似乱数を用いる事により、同じパスワードでも毎回異なった暗号文が生成されます。
その為、例えば定時報告等、一定時間で同一内容の文章が送られる場合において、暗号文が異なるため暗号化前の文章が推測不能になります。
- 用いたアルゴリズムとそのパラメータ(平文の鍵やパスワードを除く)はファイル中に保存されるため、
復号時の際は正しい鍵もしくはパスワードを指定するだけで復号できます。

又、AES暗号処理部では、アセンブリ言語にてSIMD(SSE2)命令セットを使用して記述されているため、従来より高速に処理可能です。
※CUI(コマンドライン・ユーザー・インターフェイス)アプリケーションです。

仕様

これらのデータの構造はASN.1(抽象構文表記法)にて定義されています。 本ソフトでは、DER(※BERをより厳しくした規則)での符号化に対応しています。

対応暗号ファイル形式

暗号文、電子証明書などの構文を定める規格で、PKCS#7の上位互換となる規格です。 本ソフトでは、暗号文の処理に対応しています。 対応するデータ・タイプ

- 暗号化データ(Encrypted-Data)
    暗号ファイルには、暗号文のみが格納されます。鍵管理はされません。
- 封筒化データ(Enveloped-Data)
    鍵管理手法(Key Management Algorithm)により暗号鍵を管理する暗号ファイルです。

対応アルゴリズム

ダイジェスト(ハッシュ)

コンテンツのダイジェスト値(バイト列)を求めるためのアルゴリズムです。 また、HMACアルゴリズムにおいても、このアルゴリズムが土台になります。

- SHA-1     … oid = 1.3.14.3.2.26
- SHA-224    … oid = 2.16.840.1.101.3.4.2.4
- SHA-256    … oid = 2.16.840.1.101.3.4.2.1

鍵管理手法

暗号鍵を管理する手法です。 本ソフトでは、パスワードによる鍵管理手法に対応しています。

- 鍵導出による鍵管理 

パスワードを用いて暗号鍵を管理する手法です。

- id-alg-PWRI-KEK     … oid = 1.2.840.113549.1.9.16.3.9

コンテンツ用暗号

コンテンツを暗号・復号するためのアルゴリズムです。

- DES-CBC     … oid = 1.3.14.3.2.7
- DES-3EDE-CBC   … oid = 1.2.840.113549.3.7
- AES-128-CBC   … oid = 2.16.840.1.101.3.4.1.2
- AES-192-CBC   … oid = 2.16.840.1.101.3.4.1.22
- AES-256-CBC   … oid = 2.16.840.1.101.3.4.1.42

メッセージ認証符号

コンテンツに改ざんが無いか確認するためのアルゴリズムです。 その他、鍵導出関数PBKDF2にも用いられ、本ソフトではこの用途にて使用しています。

- HMAC-SHA-1   … oid = 1.3.6.1.5.5.8.1.2
- HMAC-SHA-224  … oid = 1.2.840.113549.2.8
- HMAC-SHA-256  … oid = 1.2.840.113549.2.9

鍵導出手法

パスワードを用から、コンテンツ用の暗号鍵を計算するアルゴリズムです。

- PBKDF2     … oid = 1.2.840.113549.1.5.12

疑似乱数 (※セッション鍵や、初期化ベクタIVに用います。)

- Mersenne Twister + SHA-256

使い方

CUI(コマンドライン・ユーザー・インターフェイス)アプリケーションです。 DOS窓や、コマンドプロンプトで使ってください。 バッチを組みたい人や、D&D用のショートカット用アイコンを作りたい人には、きっと便利かもしれません。 それ以上に、自分の作ったソフトに、クラスをそのまま組み込みたい人にも便利でしょう。 でも、単一ファイルにしか処理をかけないので、複数のファイルをまとめて暗号化したい場合は、別途に圧縮ソフトとかで圧縮して下さい。

注意

基本的に、ソースコードは全て公開していますが、本サイトにて公開されるクラスや、ソースコードの流用をする際は、ご一報ください。 又、本クラスや、ソースコードの利用により発生したいかなる損害につきましては 法律が許容する最大限において責任を負いませんので、使用者の責任の元、ご利用頂ければ幸いです。

元々、AES暗号をSSE2(SIMD)命令を用いて高速化する研究の副産物ですが、現在のCPUではAES暗号処理用のSIMD命令があるので、無用の長物だと思います。