暗号化されたデータの格納

Adobe® AIR® ランタイムは、ユーザのコンピュータにインストールされた各 AIR アプリケーションに対して永続的に暗号化されたローカルストアを提供します。これにより、他のアプリケーションまたはユーザによって簡単に解読されないように暗号化された形式で、ユーザのローカルハードディスクに格納されたデータを保存および取得できるようになります。各 AIR アプリケーションに対して個別の暗号化されたローカルストアが使用され、各 AIR アプリケーションは各ユーザに対して個別の暗号化されたローカルストアを使用します。

注意: 暗号化されたローカルストアが用意されているだけでなく、AIR は、SQL データベースに格納されたコンテンツの暗号化も提供します。詳しくは、SQL データベースでの暗号化の使用を参照してください。

Web サービスに対するログイン資格情報など、セキュリティで保護する必要がある情報を格納するために暗号化されたローカルストアを使用する必要がある場合があります。

AIR では、Windows は DPAPI、Macintosh は KeyChain、Linux は KeyRing または KWallet を使用して、暗号化されたローカルストアを各アプリケーションおよびユーザに関連付けます。暗号化されたローカルストアは AES-CBC 128 ビット暗号化を使用します。

暗号化されたローカルストア内の情報は、アプリケーションセキュリティサンドボックス内の AIR アプリケーションコンテンツでのみ使用できます。

ローカルストアからデータを格納および取得するには、EncryptedLocalStore クラスの setItem() 静的メソッドと removeItem() 静的メソッドを使用します。データは、ストリングをキーとして使用し、バイト配列として格納されたデータと共に、ハッシュテーブルに格納されます。

例えば、次のコードは暗号化されたローカルストアにストリングを格納します。

var str:String = "Bob"; 
var bytes:ByteArray = new ByteArray(); 
bytes.writeUTFBytes(str); 
EncryptedLocalStore.setItem("firstName", bytes); 
 
var storedValue:ByteArray = EncryptedLocalStore.getItem("firstName"); 
trace(storedValue.readUTFBytes(storedValue.length)); // "Bob" 

setItem() メソッドの 3 番目のパラメータである stronglyBound パラメータはオプションです。このパラメータが true に設定されている場合は、次のときに、格納を行っている AIR アプリケーションの電子署名とビットおよびアプリケーションの発行者の ID に対して、格納されたアイテムをバインドすることによって、暗号化されたローカルストアは高いレベルのセキュリティを提供します。

var str:String = "Bob"; 
var bytes:ByteArray = new ByteArray(); 
bytes.writeUTFBytes(str); 
EncryptedLocalStore.setItem("firstName", bytes, true); 

stronglyBound を使用して true に設定し格納されたアイテムの場合、getItem() に対する後続の呼び出しは、呼び出しを行っている AIR アプリケーションが格納を行っているアプリケーションと同一である場合(アプリケーションディレクトリ内のファイル内のデータが変更されていない場合)にのみ成功します。呼び出しを行っている AIR アプリケーションが格納を行っているアプリケーションと異なる場合、強力にバインドされたアイテムに対する getItem() を呼び出したときに、アプリケーションは Error 例外をスローします。アプリケーションをアップデートした場合、暗号化されたローカルストアに以前書き込まれた、強力にバインドされたデータを読み取ることはできません。

stronglyBound パラメータが false (既定)に設定されている場合、アプリケーションがデータを読み取るためには、発行者 ID のみ同じままである必要があります。アプリケーションのビットは変更される可能性があります(また、発行者の署名が必要です)。ただし、データを格納したアプリケーション内の場合のように、まったく同じビットである必要はありません。

デフォルトでは、AIR アプリケーションは、別のアプリケーションの暗号化されたローカルストアを読み取ることはできません。stronglyBound 設定により、アプリケーションの発行者 ID のハイジャックを試みることによって、攻撃者のアプリケーションがアプリケーションの暗号化されたローカルストアから読み取ろうとするのを防ぐ追加のバインドが(アプリケーションビット内のデータに対して)提供されます。

移行署名を使用して、別の署名証明書を使用するようにアプリケーションを更新する場合、stronglyBound パラメータが false に設定されていても、更新されたバージョンは元のストア内のアイテムにアクセスできません。詳しくは、証明書の変更を参照してください。

次の例のように、EncryptedLocalStore.removeItem() メソッドを使用して、暗号化されたローカルストアから値を削除できます。

EncryptedLocalStore.removeItem("firstName"); 

次の例のように、EncryptedLocalStore.reset() メソッドを呼び出すことによって、暗号化されたローカルストアからすべてのデータを消去できます。

EncryptedLocalStore.reset(); 

AIR Debug Launcher(ADL)内のアプリケーションをデバッグするときは、アプリケーションは、アプリケーションのインストール済みのバージョンで使用されているものとは異なる暗号化されたローカルストアを使用します。

格納されたデータが 10MB を超えると、暗号化されたローカルストアの処理が遅くなる場合があります。

AIR アプリケーションをアンインストールするときは、アンインストーラは暗号化されたローカルストアに格納されたデータを削除しません。

暗号化されたローカルストアデータは、ユーザのアプリケーションデータディレクトリのサブディレクトリ内に配置されます。このサブディレクトリのパスは、Adobe/AIR/ELS/ の後にアプリケーション ID が続いたものになります。