web-dev-qa-db-ja.com

PKCS#11オブジェクトハンドルをセッション間で使用できますか?

PKCS#11 2.40仕様は、セッションAを使用して取得したオブジェクトハンドルをセッションBで同じトークンに使用できるかどうかの説明が少しあいまいです。

主な仕様は次のように述べています(以下の強調はすべて私のものです):

トークン上の特定のオブジェクトには、オブジェクトの存続期間中固定されているハンドルは必ずしもありません。ただし、特定のセッションが特定のハンドルを使用して特定のオブジェクトにアクセスできる場合、そのセッションが存在し続ける限り、そのセッションはそのハンドルを使用してそのオブジェクトにアクセスできます。オブジェクトは引き続き存在し、オブジェクトは引き続きセッションにアクセスできます。

使用ガイドでは次のように述べています:

オブジェクトハンドルは、オブジェクトハンドルによる特定のオブジェクトの可視性が特定のアプリケーションのすべてのスレッドで同じであるという意味で、セッションハンドルに似ています。

そしてまた...

Cryptokiの実装では、セッションとオブジェクトのハンドルの個別のスペースがサポートされている場合とサポートされていない場合があります。

最後に、使用ガイドにはシナリオが含まれています。そのシナリオのステップ16、17、および18は、同じオブジェクトハンドルを使用できることを示しています。ただし、使用されている表現は「オブジェクトハンドル1に関連付けられたオブジェクト」であるため、ハンドルが有効であったかどうかは100%明確ではありません。

  1. A1は[A's] セッション4を使用してオブジェクト検索操作を実行し、O2のハンドルを取得します。検索はオブジェクトハンドル1 ....を返します.

  2. A1は[Aの] セッション4を使用して、[Aの] オブジェクトハンドル1に関連付けられたオブジェクトを変更しようとします。 Aのセッション4はR/Oセッションであるため、トークンオブジェクトであるO2を変更できないため、試行は失敗します。

  3. A1は[Aの] セッション7を使用して、[Aの] オブジェクトハンドル1に関連付けられたオブジェクトを変更します。今回は、Aのセッション7がR/Wセッションであるため、試行はO2の変更に成功します

誰もがこのトピックについて決定的にコメントできますか?それとも、これを明確に定義している仕様の別の部分を指していますか?

1
Duncan Jones

はい、オブジェクトハンドルはセッション間で使用できます。

あなたの最初の引用はそれについて何も言いません。その目的は、同じ(トークン)オブジェクトへのハンドルがアプリケーションの異なる呼び出し間で変更される可能性があることを明確にすることですが、アプリケーションが実行中でセッションが存在する限り、変更されません。

3番目の引用は、intにキャストされたハンドルが、セッションハンドルとオブジェクトハンドルの両方として同時に表示される可能性があることを明らかにしています。ここのステップ12では、オブジェクトハンドル7が返されますが、セッションハンドル7はすでに存在しています。一種の明白です。

UGは次のようにも言っているので、2番目の引用はさらに近づきます。

アプリケーションの異なるスレッドがセッションを共有することはありません

ただし、4番目の引用は、ステップ16でセッション4のオブジェクトO2に対してハンドル1が返され、ステップ18でこのハンドル1がセッション7で使用され、実際にオブジェクトO2が変更されるため、明確にする必要があります。

1
dannyM