COPP が 使えない理由と Windows Live Messenger のアイコンが表示されない理由の意外な関係

COPPをWindows2000で使える様にするために試行錯誤していたところ、次の処理でWindows2000はエラーになることが分かりました。

CryptCreateHash(hProv, CALG_AES_128, 0, 0, &hHash);
Error: 0x80090008 NTE_BAD_ALGID 無効なアルゴリズムが指定されました。

要するに、Windows 2000ではこの暗号化アルゴリズムに対応していないのです。
MSDNのドキュメントを見ると、

CALG_AES_128   AES block encryption algorithm. Key length: 128 bits.
CALG_AES_192   AES block encryption algorithm. Key length: 192 bits.
CALG_AES_256   AES block encryption algorithm. Key length: 256 bits.
    Windows 2000:  This algorithm is not supported.

とかかれているんですよね。


そんなわけで、気分転換に、Windows Live Messenger でアイコンや画像が表示できない問題について解析してみたのですが、次のようなコードでエラーが出てることが分かりました。

00497313 56                   push        esi
00497314 FF 33                push        dword ptr [ebx]
00497316 68 0E 66 00 00       push        660Eh
0049731B FF 37                push        dword ptr [edi]
0049731D FF 15 4C 12 40 00    call        CryptDeriveKey
00497323 85 C0                test        eax,eax
00497325 0F 84 FF B0 11 00    je          005B242A

実は、この 0x660Eというのは CALG_AES_128 の値。
つまり、 CALG_AES_128を使おうとして、エラーになってるというのが分かります。

アルゴリズムIDについてはMSDN『ALG_ID Data Type』に詳しく書いています。

Windows XPのファイルシステムはEFS(Encrypting File System)対応だからWindows2000ではアクセスできないといわれますが、実は、Windows2000もEFS自体には対応しています。
XPはEFS使用時にデフォルトでAESで暗号化してしまうため、AESをサポートしていないWindows2000では見ることが出来ないわけです。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\EFS に AlgorithmID という暗号化指示をしても、暗号化できるのですが、Cipherというコマンドラインツールを使うと 簡単にEFSを使って暗号化ができます。

注意点は別のシステムや、SID(PCのに振られる識別ID)が変わってしまうとアクセスできなくなることです(リカバリした場合も同様)。

[NT]Windows 2000 における EFS を使用したデータの暗号化方法

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です