問題タブ [hsm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
4066 参照

java - 3DES に対して異なる結果を返す PKCS11 serveKey() および encrypt()

私は HSM と PKCS11 を使用してキー導出の問題に取り組んでいますが、現在、encrypt() メソッドを使用するのではなく、deliverKey() メソッドを使用するかどうかによって結果がまったく異なる理由を理解できません。どちらの場合も、結果に DESede/ECB/NoPadding アルゴリズムを使用しようとしていますが、結果を生成するために使用する方法 (deriveKey と暗号化) に応じて、異なる結果が表示されます。

少し戻って概要を説明します... Global Platform で使用される特定のキー導出方法を使用して、スマート カードで使用するマスター キーを多様化しています。このメソッドは、新しいキーを導出するために使用されるマスター キーと 8 バイトのデータ (多様化データ) から始まります。div データ バイトは文字通り、DESede/ECB/NoPadding を使用してマスター キーで暗号化され、その結果が新しい派生 3DES キーの一部として使用されます。(実際には、複数の暗号化が実行され、結果が連結されて新しい鍵が形成されますが、ここでは問題ではありません。)

両方のケースでマスター キーを検証し、多様化データが両方のケースで同じであることを検証し、同じパディングで同じアルゴリズムを使用していることを検証しました。また、派生キー テンプレートを DES、2DES、3DES に変更してみました。長さが異なるだけで、すべて同様の結果が得られます。

現在、IAIK ラッパー (Java で記述された pkcs11 ラッパー) を使用してテスト ケースを実装しました。これをここに投稿します。キーは単なるテスト キーであり、div データはサンプル div データであるため、ここには機密情報はありません。最初に HSM で基本キーを作成してから、多様化データを使用して session.deriveKey() を呼び出して新しいキーを派生させようとします。派生キーのバイトは 16 進数で出力されます (HSM 内ではなくメモリ内でキーを派生させる現在作業中の実装に基づいて、キーの値は正しくありません)。次に、マスター キーを使用して暗号化を実行するようにセッションを初期化し、多様化データを暗号化します。これにより、期待値が得られます (再び、動作中の実装に対してチェックされます)。

私が探しているのは、同じ基本キー、同じ div データ、および同じ暗号化アルゴリズムを使用しているときに、これらの操作が異なる結果をもたらす理由についての洞察です。私は、deriveKey() が水面下で何をしているのか理解できず、これを明らかにするためのドキュメントやソース コードを見つけることができません。派生キーは HSM の外では使用できないため、deliverKey() メソッドを使用できる必要があります。

任意の洞察をいただければ幸いです。

上記のコードを実行したときの関連する出力は次のとおりです。

0 投票する
2 に答える
2520 参照

security - アプリケーションから HSM への相互作用のセキュリティ

何かが足りない気がします。HSM がキーや暗号化されたデータなどを 100% 確実に保護できることは知っています。しかし、HSM にアクセスしてシークレットをユーザーのメモリにコピーした直後に、攻撃者が機密データを盗むのを防ぐにはどうすればよいでしょうか? または、たとえば、同じ API を使用してモジュールにアクセスするだけですか? アプリケーション認証はどのように機能しますか? パスワードのような単純なものに基づいている場合、なぜ攻撃者はメモリからパスワードを盗み、HSM にログインして、必要なものを取得できないのでしょうか? また、カーネルが侵害された場合、プロセスと HSM 間の通信をリッスンまたは改ざんできると思いますよね?

0 投票する
3 に答える
2018 参照

rsa - HSM で Microsoft RSA キー BLOB をラップする方法

RSAPrivateKey を HSM にラップして、キーのアーカイブのために Microsoft CA に送信できるようにする必要がありますが、どのようなアプローチを取るべきかわかりません。

問題は、Microsoft RSA キー形式が独自のものであり、pkcs11 または私の会社が使用する nCipher HSM でサポートされていないように見えることです。

http://msdn.microsoft.com/en-us/library/cc250013.aspx

これが単なる RSAPrivateKey である場合、HSM でキー ペアを生成し、HSM にラッピング キーをロードし、RSAPrivateKey をラップして、ラップされたキー バイトを抽出するのは簡単です。明らかに、このキー BLOB 形式はサポートされていないため、別のアプローチを取る必要があります。

私が最初に考えたのは、RSAPrivateKey を拡張し、getEncoded() メソッドをオーバーライドして、この独自のキー形式を返すことでした。Java で高レベル API を pkcs11 に提供する IAIK pkcs11 ラッパーを使用しており、ベンダー定義のキー タイプの作成がサポートされています。ただし、ベンダー定義のキーのインターフェイスは、クライアント コードで組み込みのキー タイプを拡張するための利便性としてのみ存在するようであり、実際には HSM 内のキー エンコーディングを変更することはできません。

2 番目のアイデアは、pkcs11 データ オブジェクトを使用し、単純にそれをキー blob として扱い、それをラッピング キーで暗号化することでした。ここでの同じ問題は、秘密鍵のバイトをデータ オブジェクトにコピーするために、秘密鍵のバイトをアプリケーション コードに抽出し、そこからデータ オブジェクトを作成する必要があるように思われることです。 HSM のキー。

これらのアプローチに代わるものを探していますか、それとも pkcs11 に見落としていた機能があり、これが可能になるのでしょうか? 任意の洞察をいただければ幸いです。

0 投票する
3 に答える
17539 参照

c++ - USB トークンからの証明書とキーを使用したデジタル署名

ユーザーのキーと USB トークン (ドングル) の証明書を使用してファイルに署名したいと考えています。

私はこれをstackoverflowや他のサイトでしばらく検索してきましたが、.NETフレームワークのいくつかの優れた機能(私は使用していません)を除いて、何も役に立ちませんでした。

鍵が公開されていないため、暗号化はハードウェア自体で行っているようです。これは、各ハードウェア メーカーが独自の API を提供しており、この問題に対処する一般的な方法がないということですか?

また、トークンがコンピューターに接続されると、その証明書がシステム ストアに読み込まれることを読みました。お店の証明書は使えますか?このような証明書は、ストア内でどのように識別してアクセスできますか? 秘密鍵はどうですか?

証明書を .p12 または .pfx ファイルから抽出できる場合、デジタル署名に OpenSSL を使用しました。

どこかで間違っている場合は修正してください。このトピックは初めてです。

0 投票する
1 に答える
588 参照

c++ - CryptoAPI での CSP プロバイダーの識別

デジタル署名に USB トークンを使用するために MS CAPI API を使用しています。

CryptAcquireContext を使用すると、利用可能なすべての CSP の名前を出力できますが、どの CSP がプラグインされた USB トークンに関連付けられているかを知るにはどうすればよいでしょうか?

さらに、コンピューターに複数のトークンが接続されている場合はどうなるでしょうか。

アプリケーションはどのように CSP を選択することになっていますか?

0 投票する
1 に答える
1624 参照

pdf - iText: Linux で PDF 署名を自動化するために人々が使用する証明書の種類は?

Linux 上の Java で iText を使用して、PDF ファイルの自動デジタル署名用の少量 (年間 PDF 500 件未満) のアプリケーションを使用しています。

SSL証明書を使用してPDFにデジタル署名を追加するiTextがあります。これは、PDF が私のドメイン (サーバーなど) によって生成されたことを証明する有効な方法ですか? Adobe Readerで「信頼」を示す緑色のチェックマークを取得するために何らかの方法で使用できますか?

そうでない場合は、ユーザーが PDF ドキュメントを開いたときに「信頼」を示す小さな緑色のチェックマークが自然に表示されるように、PDF 用の証明書 (たとえば、SSL 証明書ではない) を使用する必要があります。

http://itextpdf.com/book/digitalsignaturesは、このトピックを私に紹介する素晴らしい仕事をしています (私はこの分野での経験がほとんどありません)。

この本は SafeNet Luna デバイス (HSM) について述べていますが、あまりにも高価です。私が必要とするのは最小限のソリューションだけで、Luna にはさまざまな機能が備わっています。Luna PCIeデバイスは安価ですが、署名に使用できる証明書を提供する以外に必要な機能はありません。また、USB ベースの SafeNet iKeyデバイスは、Windows デバイス向けにのみ販売されているようです。iKey を Linux で動作させた人はいますか? それは可能ですか?他の企業が Linux で動作する USB ベースのデバイスを提供していますか?

Linux ボックスで自動化されたデジタル署名された PDF を提供するための最小限のソリューションを探しています。多くの中小企業が同様のニーズを持っていると確信しています。そこにある既存の知識を活用しようとしているだけです。人々はこの問題をどのように解決しますか?

このプロセスを自動化するために私が目にするソリューションは、Adobe Live Cycle を使用する大企業を想定しており、それに応じて価格が設定されています (例: https://www.globalsign.com/pdf-signing/compare-pdf-signing.htmlを参照)。しかし、中小企業も物事を自動化する必要があります。

理想的には、誰かが SSL 証明書と同様の証明書を販売しますが、PDF ファイル用です。そのようなことはありますか?

ハードウェア (何らかの種類) は要件ですか (そう思われます)? ハードウェアが必要な場合、最小限のソリューションはありますか (デジタル署名を有効にする以外に機能が制限されているなど)?

誰かが私が木から森を見るのを手伝ってくれることを願っています. 常識って何?

0 投票する
1 に答える
5637 参照

java - nfast で Java IAIK PKCS11 ラッパーを動作させる

IAIK PKCS11 ラッパーを nfast で動作させようとしています。

常に pkcs11wrapper ライブラリ ファイルが必要で、エラーがスローされます -

java.lang.UnsatisfiedLinkError: pkcs11wrapper (java.library.path に見つかりません)

/opt/nfast/toolkits/pkcs11/libcknfast.soHSM が提供するライブラリ ファイル ( ) を使用するにはどうすればよいですか?

どんな助けも大歓迎であり、忘れられています!