コプロセッサの設定方法

アーキテクチャの概略

全てのSHA取引はパッケージcom.dalsemi.onewire.application.shaインターフェースから
実装されます。このパッケージでは、SHADebitとSHADebitUnsigned二つのサンプル取引があります。
最初のものは初期残高がユーザのiButtonに格納され、残高情報がcoprocessorによって
デジタル的に
署名するようなデビッドシステムにアカウントを実装します。
ユーザが取引をするときには、ユーザは最初に取引システム(貨幣ファイルを他のiButtonに
コピーすることを防ぐ)の正当なメンバーであることを証明するためにchallenge-response
プロトコルを用いて「challenged」になる。
そのiButtonの識別の後、アカウントデータはデジタル署名を再発行させるためcoprocessorを
用いて確認します。
もし一致した場合は、アカウントファイルは偽造されてないので取引がなされます。
アカウントデータの最新化の後、新しいデジタル署名が作られ、ユーザ装置にアカウントファイル
が書かれます。
二番目の取引はまったく同じ仕事をしますが、その取引にはデジタル署名はありません。
DS1961S/DS2432を用いることを仮定していて、iButtonがコピー保護を持っているため
デジタル署名が不必要であるためである。
(すなわち、内部の唯一の秘密secretは書くために知らないといけない)
SHA取引は心臓部にSHAiButtonCoprを持っている(すなわち言い換えると、DS1963SがSHA取引の際に
coprocessorとして動作するように初期化されている)。
そういう意味で、SHA取引はSHAiButtonCoprの拡張として考えることが出来ます。
「署名するもの(thing to sign with)」と「署名は何か(what it's signing)」を分離するJavaでの
decoratorクラスと同じ目的で動作します。
「署名するもの(thing to sign with)」(すなわち、coprocessor, SHAiButtonCopr)での方法は
アプリケーション開発者に対し「署名は何か(what it's signing)」を最小のコーディングで
異なったシステムに容易に移動することが出来ます。
それに加えて、SHAiButtonCoprVMすなわちシミュレーションされたcoprocessorはハードフェアの
DS1963Sの代わりとして用いることが出来ます。
このクラスは開発費上昇をとめる便利な道具として供給されていますが、最大の安全性に対しては
実際のハードウェアcoprocessorが推奨されます。
SHA取引における各々のmethodは、パラメータとしてSHAiButtonUserを持ちます。
いくつかの特定のユーザについての状態情報はSHA取引に保存されるけれども、
そのSHA取引それ自身はシステムの静的な部分としてユーザ(簡単な例として、
ユーザのアカウント残高はその取引が終わった後で、SHADebitクラスのメンバーとして
保存される)を処理すべきではなく、むしろシステムに何か作用させるものである。
APIで供給されているものはSHAiButtonUser33とSHAiButtonUser18の二つの
SHAiButtonUserオブジェクトです。
SHAiButtonUserのデフォールトの実装は二種類のSHA iButtonのみのサポートではあるが
(family code 33 - DS1961S,family code 18 - DS1963S)、SHA取引のユーザの概念は
任意の1-Wireメモリーデバイスをサポートするように拡張できます。
SHAiButtonUser33とSHAiButtonUser18は手ごろな拡張子を持っていますが、
要求されたアカウントデータを担う認証を両者とも行います。もし、iButton認証が特定の
システムで重要でない場合(例えば、ユーザトークンの情報を記録する必要が無い
ドアアクセス制御)、SHAiButtonUserクラスは署名されたアカウント情報を担うような
1-Wireメモリーデバイスをサポートするように容易に拡張することが出来ます。

SHA iButtonsとして他のメモリーデバイスを用いることはiButtonの認証に対して
challenge-responseプロトコルの使用を拒絶するのみであることに注意してください。
それでもそのデータに対して発行されたデジタル署名はアカウント情報が格納されている
ページ番号と同様の48-bitlasered ROM IDがユーザの唯一のトークンを保持出来る最小限の
安全レベルです。

sha.propertiesの使用法

sha.propertiesのkey-value対の全てはどのように使いたいのかとちゃんとコメントし、
その値に対して正しいオプションがあることを示すべきです。
このプロパティファイルは付属のデモプログラムに対しての全ての構成情報源です。
もし、異なったデモアプリケーションの実行に際して、「the specified value for」
という言葉、あるいは似ている言葉が使われたときには、その言葉はsha.propertiesの中にある
key-value対のことを述べています。
付属のサンプルアプリケーションの全てはコマンドラインでsha.propertiesファイルを
フルバスで記述することが出来ます。これはデバッグに対する異なった設定を記述する
ときに用いられます。例えば、次のコマンドラインはカレントフォルダーにある
debug.sha.propertiesというファイル名から全てのプロパティをロードします。

   java initcopr -p .\debug.sha.properties

選択的にこの方法は異なったサービスを記述するのに用いることが出来ます。

   java initcopr -p .\DoorAccess.sha.properties
   java initcopr -p .\VendingMachine.sha.properties

どのサンプルアプリケーションでも始める前に、設定オプションの全てが動作する環境に対して
意味のあるようになっているか確認するために見てください。
この実験では
java initcopr
のみで動作するようにしてあります。また、シミュレートされたコプロセッサを用いるようにsha.propertiesが設定されています。
sha.propertiesを表示。
これをsha.propertiesというファイル名で保存し、TINIの方にファイル転送して用います。

initcopr の実例

付属のアプリケーションinitcoprはDS1963SをSHAiButtonCoprとして初期化するために、
言い換えればcoprocessorをユーザトークンの認証とユーザのアカウントデータの署名に
対して用いるように作られています。
プログラムの最初の段階は、特定のアダプターをロードすることです。ポートと同様に
用いるアダプターはsha.properties設定ファイルで指定されます。もし、アダプターも
ポートも指定されていなければ、デフォールトのアダプターが用いられます。アダプターの
ロード後にアプリケーションはcoprocessorとして初期化する候補になるDS1963Sを検索します。
もし、coprocessorのIDアドレスが指定されていたら、そのアドレスのみが検索されます。
初期化に対して正しい候補を見つけた後、2・3の設定設問がユーザーに問われます。
これらのいくつかはcoprocessorが他のアプリケーションでいかに用いられているかどうかで
影響があるので、次の質問に対して与えられた回答を特に注意を払ってください。
デモからの各々の質問の後でサンプルの回答が出ます。

(0)
   Would you like to emulate another coprocessor? (y): n
  これはエミュレートするcoprocessorがあるかを聞いているのでnと答える。
    (sha.propertiesの設定によりこの質問が出ない場合があります)

(1)
   Enter the name of the coprocessor file (usually 'COPR') : COPR
   Enter the file extension of the coprocessor file (0) : 0

これはcoprocessorデバイスに格納されているcoprocessor service informationファイルの
TMEXのファイル名です。
このファイルは取引アプリケーションに対する実行時の設定情報を与えます。
システムに対する重要な設定情報の全てはこのファイルに保存されるでしょう
(さらに特定の暗証が用いられる)。
サンプルアプリケーションのセットアップにおいて、二個目のcoprocessorはDS1961Sの
書き込み認証MAC (DS1961Sについてを見よ)を発行するために使われることに注意してください。
この書き込み認証coprocessorを見つけるのを簡単にするためには、そのサービスファイルを
「COPR.1」とします。

(2)
   Enter the name of the service file (4 characters) : DLSM
   Enter the file extension of the service file (102 for Money) : 102

これはユーザーのアカウント情報に対するTMEXファイル名です。
もし、102の拡張子がファイル名に用いられていたら、TMEXファイル仕様はこのアカウントファイル
は(可能ならば)write-cycleカウンターを持ったメモリーに格納されます。

(3)
   Enter authentication page number (7) : 7

これはユーザーの唯一の認証暗証を再生する時にcoprocessorによって用いられるメモリーの
ページです。

マスター認証暗証はこのページに対応した暗証にインストールされます。(もしその数が
7ならば暗証番号は7)
ページ8は署名ページ番号に対して用いられ、この番号はcoprocessor service fileを
保存するために十分大きな空間でなければならないことに注意してください。

(4)
   Enter workspace page number (9) : 9

これはユーザーの唯一の認証暗証とユーザーの認証応答の再生のためにcoprocessorによって
用いられるメモリーのページです。
ページ8は署名ページ番号に対して用いられ、この番号はcoprocessor service fileを
保存するために十分大きな空間でなければならないことに注意してください。


(5)
   Enter version number (1) : 1

これは開発者の自由でアプリケーションプログラムによってのみ用いられる。
coprocessorのserviceファイルを更新あるいは特定のcoprocessorに対するアプリケーションの
特定のバージョンの合致を検出するために用いることができます。

(6)
   How would you like to enter the binding data (32 bytes)?
      1 HEX
      2 ASCII
     ? 1
    0102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20

   How would you like to enter the binding code (7 bytes)?
      1 HEX
      2 ASCII
     ? 2
    binding

ユーザートークンに対する唯一の暗証を作るために、ユーザートークンの唯一のROM IDと一緒に、
束縛データと束縛コードが用いられます。
最初にマスター認証暗証がユーザートークンにインストールされ、この束縛データはユーザーの
アカウントページ数と、iButtonに暗証を結びつけるためのユーザーの唯一のアドレスと共に
用いられます。coprocessorはユーザーの唯一の暗証を再生するためにこの情報の全てを使うことが
出来ます。

(7)
   Enter a human-readable provider name:
    Maxim/DalSemi

プロバイダー名は適切な名前によって他から多様なserviceファイルを区別するのに用いることが
出来ます。このような方法によって"COPR.0"と"COPR.1"の二つのserviceファイルはインストール
されプロバイダー名の場所は"Dallas-Cola"自動販売機サービスと"Maxim-Cola"自動販売機サービス
との区別に用いることが出来ます。


(8)
   Enter an initial signature in HEX (all 0' default):
    03010401060301040106030104010603010401060301040106

初期署名はアカウントデータに署名するときに用いられる20バイトのデジタル署名の値です。
アカウントデータファイルはそれが発行された後記録するために署名に対する20バイトの空間を
持っています。署名を発行したときにこの情報はアカウントデータの中にスポットで記録される
ものです。署名は全てのアカウントデータファイルに渡って計算されるから、この初期署名は
最後のデジタル署名の結果に影響します。

(9)
   Enter any additional text you would like store on the coprocessor:
    Application Specific Text (optional)

Completely optional and completely application-specific text.

(10)
   Enter an encryption code (0): 0

  暗号コードを入れてください

通常、開発者はサインしたのと同じユーザのアカウントを暗号化することによってセキュリティの
ほかのレベルを付け加えたいでしょう。この暗号コードは用いられている暗号のタイプを示すのに
用いられ、アプリケーション特有の値を持つべきです。

(11)
   How would you like to enter the signing secret (unlimited bytes)?
      1 HEX
      2 ASCII
     ? 2
    signing secret

サイン暗号はcoprocessorの8ページに入れられ、 secret 0,アカウントデータに対するデジタル
署名を発生させるのに用いられる。これはcoprocessorのservice fileには置かれません。

(12)
   How would you like to enter the authentication secret (unlimited bytes)?
      1 HEX
      2 ASCII
     ? 2
    authentication secret

認証暗証はcoprocessorの決まったページに入れられ、その認証応答の正当性に対するユーザの
証であるユニークな署名を再発生するのに用います。

The authentication secret is installed on the specified page number of the
coprocessor device and is used to recreate the unique signature of a user
token for validating it's authentication response.  This is not stored in
the coprocessor's service file.


(13)
   Would you like to reformat the authentication secret for the 1961S?
   (y or n)  no

この質問に対する答えが「yes」だったら、認証暗証は長さ47(あるいは47の倍数)のバイト配列に
変換され、その時あまりの場所には適当な値が入れられ、DS1961Sでは0xffが入れられます。
もし、答えが「no」だったら、暗証はそのままになります。DS1961Sの認証に対するこの
coprocessorを用いたいのでしたら、肯定的な答えをしなければいけません。

coprocessorの初期化の後、確認メッセージがオブジェクトのtoString()を通して表示されます。

Initialized Coprocessor
COPR: B20000000013FB18, provider: Maxim/DalSemi, version: 1

initcoprの実例 - シミュレートされたCoprocessorを使う

coprocessorを模擬(シミュレーション)するときは、データファイルを作成するために同じ
アプリケーション (initcopr) を走らせます。異なる質問は一番始めだけです。

(1)
   Would you like to emulate another coprocessor? (y) no

この質問に対する答えが「yes」だったら、アプリケーションは示されたcoprocessorと 
adapter/portの組み合わせで一番初めのcoprocessorを探します。
1963Sが正当なcoprocessorであるか検出するためのcoprocessor serviceファイル名
(sha.propertiesの中で明示されるように)として用いられます。
それから、ファイルから全ての設定が読み込み、認証暗証とサイン暗証の値に対して入力を
促します。

もし質問の答えが「no」だったら、このwalkthroughは模擬(シミュレーション)無しの
coprocessorと全く同じになります。