「影の王国について言えることは1つだけです。現実とその影があります。 これがすべての本質です。 現実の世界では、すべてが収集される現実の地球上の実際の都市であるアンバーのみが存在します。 そして影の王国は、非現実の無限大です。 ここでもすべてを見つけることができます-しかし、それは影、現実の歪んだ反射になります。 影の王国はアンバーを四方から囲んでいます。 さらに、カオスが支配します。 アンバーからカオスの王国への道のすべてが可能です。ロジャー・ジェリャズニー。 アンバーの九王子
それはすべて、異なる非常にリモートのワークステーションからのetokenで同じキーを使用する必要から始まりました(いくつかのトークンのUSB Over IPは少し高価になります)。 私は
habr.com/post/276057という作品に
出くわしました。その作者は敬意を払っています。私のプロジェクトでは、彼が逆にした機能のかなりの部分が使われました(コードはオープンです)。 確かに、判明したように、etsdk.dllで機能するものはすべて青魚でのみ機能します。 したがって、JaCartaの場合、新しい関数を書き直し、編集の一部にする必要がありました。
長い研究の結果、JaCarta Editorが登場しました-最も現代的なものを含むAladdinのトークンのエンティティ(公式ドキュメントでトークンファイルシステムオブジェクトがどのように呼ばれるか、エフェメリティと非現実性を暗示する方法)を表示および編集できるプログラムです。
Rutokenの同様のアプリケーションはRutoken SDK(Rutoken Editor)の一部として公開されていますが、少なくとも15年前にインターネットで見つかったドキュメントから判断すると、Aladdinの場合は少なくとも公開されていません(ETEditor)。
プログラムはAutoitで記述され、EToken PRO Java 72 K、JaCarta LT、JaCarta Pro、JaCarta GOST-2でテストされています。
Rutokenドライバーがコンピューターにインストールされている場合、プログラムは機能しません(ETokenまたはJa Cartaにはリーダー番号0が必要です)。
同じ理由で、正しい操作のために接続する必要があるトークンは1つだけです。
スクリプトはWindow $システムコールを使用し、このOSファミリでのみテストされました。
動作させるには、「JaCarta Single Client」 (メーカーのウェブサイトから無料ダウンロード)をインストールする必要があります。インストール時には、JaCarta File System機能を含む大幅に新しいバージョンのetsdk.dllとjcFS.dllをインストールしますetsdk.dllにありますが、jcFSには、GOST-2などのいくつかの最新のジャカルトでの作業が不可能な、はるかに多くの機能があります)。 ユニファイドクライアントがインストールされている場合、当然、プログラムでフォルダーにこのdllを検索して配置する必要はありません。そうでない場合、特定の種類のトークン用にドライバーがインストールされている場合、このdllはプログラムフォルダーにある必要があります。
すべてのjcFS機能は製造元のWebサイトで詳細に説明されていますが、それにもかかわらず、これらの機能の一部のパラメーターは実験的に選択する必要がありました。
トークンのルートディレクトリにアクセスするには、ETRootDirOpenまたはJCRootDirOpen関数を呼び出す必要があります(dllの最初が2番目を呼び出すため、これはほとんどすべての関数に当てはまりますが、いくつかの例外があります)。0のベンダー識別子(0xF007のような定数PKIAdminやMessagePROなどのユーティリティを使用して生成された銀行鍵を格納する、ほとんどが古いeTokenの個々のディレクトリのみを参照してください。
現代のジャカルタの次の重要な機能は、トークンにインストールされているアプレットのIDを知る必要があることです。JCSelectApplet関数がこれを担当します。
通常、古いトークンにはデフォルトのアプレットがあり、この関数の呼び出しは特に必要ありませんが、アプレットIDを知らない新しい比較的比較的新しいジャカルトでは、それ以上の作業は不可能になります。 この場合、トークンから情報を受け取るすべての関数を呼び出すと、Falseが返されます。 私のプロジェクトでは、この場合、2段階のブルートフォースが実装され(トークンは常に2つのIDに応答しますが、そのうちの1つだけが機能します)、IDと必要な値でさらに機能します。
すべての情報は、ディレクトリツリーの下にある出力ウィンドウに表示されます。
PINコードが入力されました。入力しようとした残りの試行に関する情報も表示されます。
ディレクトリの内容とファイルに関する簡単な情報が表示されます:名前、ファイルがプライベート情報であるかどうかはプライベートPINコードです-文字p:(ファイルはその後パブリック、ユニットはプライベートです)、および「s:」の後のバイト単位のファイルサイズ。 ファイルをダブルクリックして開きます。
トークンファイルの内容を表示し、必要に応じて、16進形式でバッファにコピーしたり、バイナリ形式でコンピューターに保存したりできます。
ファイルの内容を変更し、メニューで「変更を保存」を選択することもできます(PINコードを入力する必要があります。入力していない場合は、適切なメッセージが表示されます。その場合、編集したデータを選択してクリップボードにコピーできます)。
ファイルを削除するには、ファイルを選択して[削除]をクリックすると、確認ウィンドウが表示されます。
JaCarta File Systemには、テストしたすべてのトークンに存在する興味深い機能があります。 トークンにファイルのないディレクトリまたはディレクトリを作成すると、トークンを操作する次のセッション中にそれらは消えます。明らかにこのように、ファイルシステムはトークンのメモリを保存し、すべてのゴミをクリーンアップします。
したがって、プログラムの[作成]ボタンをクリックすると、1つまたは複数のディレクトリとファイルからチェーンがすぐに作成されます。 プログラム内のディレクトリのネストの深さは2であり、ルートはカウントしません。 ルートディレクトリでは、ディレクトリのみを作成できますが、ファイルは作成できません。
エンティティを作成、編集、または削除する前に、PINコードを入力する必要があります。
ディレクトリ名に関する非常に重要な注意!
製造元がコンテンツを作成するトークンでは、どこにいても同じ名前のディレクトリは表示されません。 これは、ファイルシステムの機能によるものです。
トークンに次のエンティティがあるとします://
0001 / A001 / 0008(つまり、フォルダ0001はルートディレクトリにあり、フォルダA001はその中にあり、ファイル0008はその中にあります)そして、トークンに新しいエンティティを作成します:// CC00 /
0001/1010 ファイル1010にアクセスすると、ディレクトリ0001の検索が開始されます。これはルートにあり、最初に検出されますが、そのようなファイルはありません。 その結果、関数はFalseを返し、エンティティは失われます;アクセスも削除もできません。 トークンの初期化のみが役立ちます。
特に注目すべきは、EToken PROとJA Carta Proです。外観のみが異なり、ルートディレクトリにシステムファイルがあり(画面に表示されます)、その1つにピンコードのハッシュが格納され、これらのファイルを変更します承認が不可能になり(ピンコードが不正確になる)、その後は初期化のみが役立ちます。
秘密鍵に関しては、以下を確立することができました:CryptoProなどのサードパーティの暗号化プロバイダーによって作成されたコンテナーがトークンに保存されている場合、秘密鍵を含むすべてのコンテンツが利用可能になり、それはPINコードを備えた単なるフラッシュドライブです(図を参照)。 キーペアがPKCS11を使用してトークン上で生成された場合、証明書と公開キーのみが利用可能になります。
これは実験的なプログラムであるため、有効なEDSキーを含むトークンで使用することはお勧めしません。すべての操作は実験者自身のリスクで実行されます。 これは、特に新しいエンティティの作成に当てはまります。場合によっては、結果を予測するのが困難です。
プログラムを作成するためのすべての情報はオープンソースから取得されたものであり、その作成の目的は純粋に研究です。
スクリプト自体
JACartaEditor.au3#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <EditConstants.au3> #include <TreeViewConstants.au3> #include <GuiTreeView.au3> #include <GuiMenu.au3> #include <MsgBoxConstants.au3> #include <StaticConstants.au3> #include <GuiButton.au3> #NoTrayIcon ; jcFS.dll Dim $ETSdkDll=DllOpen(
情報源eToken開発者ガイドバージョン3.50(2003年12月)