セキュリティ

セキュリティ技術

情報の秘匿
データの内容を意図した相手にしか読めないようにすること。通信データの盗聴はカード番号や個人情報の盗難、企業情報の漏洩などを引き起こし、後になりすましなどの不正行為の手がかりとなります。情報の秘匿は暗号化技術により実現されます。
情報の完全性
データの内容が意図的な改ざん、あるいは偶発的な破損を受けたときに検知できること。表示されている情報が正しいことを保障できないインフラでは契約や取引などに使用できません。電子署名を使用することで署名が行われてから情報が変更されていないことが保障されます。
身元情報の証明
相手の身元情報が信頼できること。第三者による成りすましを阻止できなければいけません。認証局 (CA) によって発行された証明書を使用して相手の身元情報を客観的に証明することができます。ただし、その身元情報を認識して意図した相手かどうかを確認する (認証) 責任はユーザにあります。
否認の防止
当事者が行為を行ったことを証明できること。いわゆる、やったやらない、言った言わないの揉め事を防止します。電子署名は文書の内容に対して承認の意思を示す捺印やサインと同じ行為であり、秘密鍵にアクセスできる人間にしか作ることができません。

TLS/SSL を始め、現在普及しているセキュリティ技術のほとんどが非対称鍵技術の上に築かれています。

公開鍵基盤

非対称鍵の応用技術が進化するにつれ「この鍵は本当に A さんのものなのか?」という鍵の身元情報を証明する方法が必要になります。

申告された身元情報が正しいと言うことを保証し、その身元情報に対する改ざん不可能な電子証明書を発行する第三者機関 (認証局; CA) を設ける事で、公開鍵に関連するセキュリティ技術を完全なものにすることができます。このような社会基盤と関連技術を公開鍵基盤 (PKI; Public-Key Infrastructure) と呼びます。

暗号強度の制限解除

デフォルトの Sun JDK 環境で使用できる暗号化アルゴリズム輸入管理制限によってキー長に制限が設けられています。実行環境で使用できるキーの最大長は以下のように調べることができます。

Set<String> algorithms = Security.getAlgorithms("Cipher");
for(String algorithm: algorithms) {
  int max = Cipher.getMaxAllowedKeyLength(algorithm);
  System.out.printf("%-22s: %dbit%n", algorithm, max);
}

Sun Java SE 6 デフォルト環境での実行結果は以下の通り。ほとんどのアルゴリズムに 128bit の制限がかけられています。

BLOWFISH              : 128bit
ARCFOUR               : 128bit
PBEWITHMD5ANDDES      : 128bit
RC2                   : 128bit
RSA                   : 2147483647bit
PBEWITHMD5ANDTRIPLEDES: 128bit
PBEWITHSHA1ANDDESEDE  : 128bit
DESEDE                : 2147483647bit
AESWRAP               : 128bit
AES                   : 128bit
DES                   : 64bit
DESEDEWRAP            : 128bit
RSA/ECB/PKCS1PADDING  : 2147483647bit
PBEWITHSHA1ANDRC2_40  : 128bit

しかし本来日本国内で使用する場合はこの制限は適用外です。Sun の ダウンロードサイトから JCE Unlimited Strength Jurisdiction Policy を入手することでこの制限を解除することができます。

ダウンロードした jce_policy-6.zip を解凍し、中に含まれている local_policy.jar と US_export_policy.jar を ${java.home}/lib/security に存在するファイルと置き換えます (中は簡単なセキュリティポリシーファイルです)。

BLOWFISH              : 2147483647bit
ARCFOUR               : 2147483647bit
PBEWITHMD5ANDDES      : 2147483647bit
RC2                   : 2147483647bit
RSA                   : 2147483647bit
PBEWITHMD5ANDTRIPLEDES: 2147483647bit
PBEWITHSHA1ANDDESEDE  : 2147483647bit
DESEDE                : 2147483647bit
AESWRAP               : 2147483647bit
AES                   : 2147483647bit
DES                   : 2147483647bit
DESEDEWRAP            : 2147483647bit
RSA/ECB/PKCS1PADDING  : 2147483647bit
PBEWITHSHA1ANDRC2_40  : 2147483647bit

コードの修正なしに暗号化強度の制限を解除することができました。なおこれは Sun のサイトからダウンロードした JDK ですので、日本向けサーバ製品などにバンドルされている JDK などは最初から解除されているかも知れません。