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)が変わってしまうとアクセスできなくなることです(リカバリした場合も同様)。
Comments