2012/02/18

多倍長整数 の処理考察

CPUの演算命令で扱える範囲を超える整数の演算方法。

やはり、機械語レベルのコードを考えると、C言語で記述すると無駄なコードを吐きまくる気がしてならない。
C言語には、『キャリー付きの演算』をする命令が無いから。
加算・減算は確実にアセンブリ言語で書く方が処理速度が速くなりそう。

例えば、足し算はMASM風にかくと、これで行けると思う。

; ecx : 扱う整数のバイト数を入れて。
; edi : 整数のポインタ
; esi : 整数のポインタ
; ebx : 返値

  xor edx, edx
  clc
  .repeat
    mov eax, [edi + edx * 4]
    adc eax, [esi + edx * 4]
    mov [ebx + edx * 4], eax
    inc edx
  .untilcxz


掛け算も、ようは筆算の要領でシフトと加算で表現する。
シフトも、アセンブリ言語でキャリー付きのシフトを使うと速い。

割り算も、掛け算どうよう、筆算の要領で。
割る数をシフトして、割られる数から引き算だから。


さて、RSA暗号処理に必要な演算 を考えてみる。

続きを読む "多倍長整数 の処理考察"

| | コメント (0) | トラックバック (0)

2011/12/01

暗号技術の研究

最近、ぼちぼち、やってます。
とりあえず、以下の技術をC++で書くことができました。
これで、CMS(暗号メッセージ構文)で標準化されているフォーマットで、
パスワードを用いた暗号文を生成するプログラムが書ける!

●暗号関数
・DES
・T-DES
・AES
●ハッシュ関数
・SHA-1
・SHA-224
・SHA-256
●鍵付きハッシュ関数
・HMAC
●鍵導出関数
・PBKDF2

続きを読む "暗号技術の研究"

| | コメント (0) | トラックバック (0)

2011/04/15

暗号技術の研究

AES暗号を処理するソフトウェアを作りました。
目指すところは、国際規格の完全準拠!!。
その為に、英文の標準類を読み漁っている最中です。

とりあえず、現状は、暗号利用モードとして、CBCモードを使い、
暗号化ファイルは、PKCS#7の構文(Encrypted-Type)にし、
暗号鍵ファイルは、PKCS#8の構文で出力する仕様としてあります。

暗号技術も、暗号化されたファイルも、国際的な規格に準拠!!
そのヴァージョンは、ここからダウンロード可能です。
SSE2による高速AES暗号・復号プログラム

・・・しかしながら、現在のパスワードの処理方法にも、規格があった!!。

続きを読む "暗号技術の研究"

| | コメント (1) | トラックバック (0)

2011/03/02

ふと思いつく。法的な効力を持つ電子署名について

某出版社から送られてきた雑誌を読みながら考え事していた。


最近、私は『標準暗号メッセージ構文』を調べるために、かなり文献を漁って読んでいたのだが、その過程で『電子署名』や『電子証明書』の構文も調査できた。
暗号文の標準が、"PKCS#7"という規格でうたわれていますが、 電子署名も、"PKCS#7"と、同じ規格でうたわれています。

この『電子署名』というのは、「電磁記録データ」(例えば、一太郎や、MS-WORDで作った文章、PDF文章、MS-Excelファイル等、電子機器で取り扱われるファイル)に対して、改ざんが行われていないことを証明するための、方法です。
この、改ざんされていないことを証明するために、暗号技術を使うので、おなじ"PKCS#7"(暗号標準)という規格で定義されているのでしょう。

この、電子署名というのは、日本国においては、『電子署名及び認証業務に関する法律』によって、使い方を正しく使えば、印鑑と同等の法的効力を持つことが定められています。
例えば、株式会社法でも、 電子定款には、電子署名を行うことが必要とうたわれており、電子証明書、電子署名の技術は、昨今の高度情報技術社会には必要不可欠な技術になっています。

続きを読む "ふと思いつく。法的な効力を持つ電子署名について"

| | コメント (0) | トラックバック (0)

2011/02/02

標準的な暗号のフォーマット(書式)

以前、暗号自体は米国標準のAES暗号であるが、出力ファイルは独自形式のファイルを出力するプログラムを作った。

しかし、よくよく調べてみると、暗号化ファイルにも、『標準』が存在した。
問題は、基本形式やら、拡張形式やら、アルゴリズムやらでドキュメントが多岐に渡って分散しており、しかも全部、英文な事だ。
出来る事なら、標準化されているのであれば、標準の形式(PKCS#7/CMS)で吐きたい。

そこで、とりあえず、解ったところまでまとめてみる。

続きを読む "標準的な暗号のフォーマット(書式)"

| | コメント (0) | トラックバック (0)

2011/01/16

SHA-1, SHA-2 (224, 256)を計算するクラスを書いてみた。

「20110116_SHA.zip」をダウンロード


とりあえず、テストの段階だけど。

SHA-1
SHA-2 (SHA-224)
SHA-2 (SHA-256)

を計算するクラス。

続きを読む "SHA-1, SHA-2 (224, 256)を計算するクラスを書いてみた。"

| | コメント (0) | トラックバック (0)

2011/01/08

AES暗号・復号 さらなる高速化の研究?

AES暗号・復号の、さらなる高速化を試行錯誤してみた。
SSE2命令によるSIMD並列化もおそらく、効果はあるのだろうけど、もっと早くできるのではないか?と。

Intel(R) Celeron(R) M CPU 430 @ 1.73GHz における、8 MByte(500,000ブロック)の暗号・復号の計測結果では、

 ・C言語で記述      … 暗号:約 1,848 Mclk  / 復号:約 2,943 Mclk
 ・アセンブリ言語で記述 … 暗号:約 1,282 Mclk /  復号:約 1,774 Mclk
 ※ただし、Core2 Quadでは、暗号化は逆に若干であるが遅くなった。考察は以下に述べる。

と高速化に寄与できた。その産物は、以下のページに公開した。
intel SSE2命令(SIMD)によるAES暗号処理

さて、具体的にやったことは・・・

続きを読む "AES暗号・復号 さらなる高速化の研究?"

| | コメント (0) | トラックバック (0)

2010/05/31

Homepage 色々更新中。

前々から、色々な方に指摘されていたのですが、自分のホームページは"HTML 4.01 Transitional"のルールからだいぶ外れた文法になっています。
コンテンツが多すぎて直すのを放置中だったのですが、少しずつ、手直しすることにしました。

続きを読む "Homepage 色々更新中。"

| | コメント (0) | トラックバック (0)

2009/11/28

MASMのメモ

近頃、プログラミングをする機械がちょっと増えていたので、
昔研究した事とか、最近になってまた研究してみた事だとかを、
簡単に資料にまとめておいた。

Microsoft Macro Assemblerのメモ書き

主に、MASM(Microsoft Macro Assembler)の使い方に関して。
と、Visual C++で書いたオブジェクトとのリンク方法等。
まぁ、実はまだまとめ途中なんだけど。

この辺を日本語で説明しているページはあまり無いので、まぁ、参考になれば、どうぞ、参考にしてください。

もともとは、自分用に書いたテキストファイルやエクセルファイルを、
htmlで書き直しただけなので、内容はあんまり期待しないでください。

| | コメント (0) | トラックバック (0)

2009/09/18

WonderSwan 開発環境

アクセス解析を見てみたら、
『WonderSwan 無料 開発環境』
というワードで検索して辿り着いた人がいました。

現状、公式の開発環境は、
(1) メーカー(バンダイ)とライセンス契約を結んで入手する。
(2) Wonder Witchを購入する(約2万円/生産中止)。
があるわけで、公式には無料の開発環境は存在しないのですが…
まぁ、でも、やろうと思えば、ソフト開発できなくはないです。
無料で入手するとなると、用意するのは、
・ Microsoft Macro Assembler (アセンブラ)
・ LSI-C86 (C言語コンパイラ)(こっちは、無くてもいい。)


もしかして、この辺の解説すると、需要とかすごい有るのでしょうか?


基本的には、WonderWitchを使わない場合は、
アセンブリ言語が使えないと、アプリケーション開発無理です。
メーカーと契約結んで開発環境を入手する場合は、持ってないので知らないです。
が、やっぱり、こっちもアセンブリ言語ベースだと思う。
WonderWitchはアマチュア用の開発環境だから、C言語のみで出来るけど…。
(その代わり、制約は多い。)

C++!?
メモリに制約がある中で、そんな実行ファイルが大きくなるオブジェクト指向使うの?
8bit や 16bit CPUだったら、普通に手続き指向でいこうぜ。
64kByteの壁があるんだし。

続きを読む "WonderSwan 開発環境"

| | コメント (0) | トラックバック (0)