アットウィキロゴ

技術情報 > Java > セキュリティ

Top > 技術情報 > Java > セキュリティ

セキュリティ

情報セキュリティ

偶然または悪意による不正なアクセス、使用、改竄、破壊、または朗詠から、コンピュータのハードウエア・ソフトウエア及びデータを保護すること

ソフトウエアのセキュリティ

ネットワークへの不正侵入・なりすまし・データの盗聴・データの改竄・データの破壊・否認・ウイルス
→ 識別と認証・承認・リソース制御と封じ込め・機密性と完全性・否認防止・監査などの特性に取り組む

運用面でのセキュリティ

ID・パスワードの漏洩・人的な操作ミス
→ セキュリティへの考慮事項とセキュリティポリシーについてユーザを教育する
→ 進入検出プランを実施し、いつ監査ログを見るのか列挙し、何を探し出すのかを特定する
→ 回復プランを実施し、侵入からの回復方法、侵入証拠の処理方法、責任者の特定方法を実装する

セキュリティポリシー

セキュリティの考え方では、機密性・完全性と共にユーザの可用性を求める
セキュリティ対策は、ユーザの自由度を奪う → どのようにどこまでセキュリティ対策を行っていくかをポリシーとして策定する

識別と認証

コンピュータなどへのアクセスや情報要求を許可する前にあらかじめユーザの正当性を確認するプロセス
電子署名・電子証明書・JAAS

承認

認証されたユーザに許可する活動内容を判定するプロセス 管理者は各ユーザに許可されるアクセスレベルを決定する
アクセス制御リスト・セキュリティマネージャ・プロテクションドメイン・JAAS

否認

行ったことを行ってないとすること
→ セキュリティポリシーに関する監査機構と共に、ユーザの行動をログとして記録する
→ 電子署名・電子証明書などと共にユーザの認証をする
メッセージダイジェスト・電子署名・電子証明書・セキュリティマネージャ

データの機密性

機密性を保証するとは、情報の所有者によって明示的に認証されていない何物かにより、その情報が読まれたり複製されたりしないようにすること
秘密鍵・公開鍵による暗号化などの仕組み JCA・JCE・JSSE

データの完全性

完全性を保証するとは、データが変更されたり破壊されたりしないようにする データ通信においては送信者が送ったデータが完全に再現され得る事が重要 JSSE

JAAS

Java認証・承認サービス(Java Authentication and Authorization Service)

JSSE

Java Secure Socket Extensionにより、SSL 3.0/TLS 1.0に対応

暗号作成

暗号化アルゴリズムを使用して、メッセージをセキュリティ保護する技術

暗号の利点

伝達するデータの機密性が守られる 使用方法によって、送信者の認証・完全性の保証・否認防止にも有用

暗号化アルゴリズム

共有鍵アルゴリズム(対称)と公開鍵アルゴリズム(非対称)がある

共有鍵アルゴリズム

送信者と受信者のみが共有する鍵をもとに、メッセージを暗号化する 複合化にも同じ鍵を使用
公開鍵アルゴリズムに比べると圧倒的に速いが、解読されるのも早い
DES (Data Encryption Standard) 排他的論理和・ビットスワッピング処理に基づく米国及び国際規格(56ビット)
RC(Rivert Cipher) 2は64ビットブロック暗号 4はストリーム暗号(1ビットずつ) 可変長鍵でRC2はDESより3倍高速

公開鍵アルゴリズム

暗号鍵・複合鍵のどちらかを公開鍵とし他方を秘密鍵とする 公開鍵を第三者が取得しても問題ない
暗号強度がある反面、計算量が非常に多い 共有鍵アルゴリズムとのハイブリッド鍵を使用する場合が多い
RSA (Rivest, Shamir, Adleman) 素因数を使った暗号 暗号化・電子署名など幅広く使用される
DSA (Digital Signature Algorithm) 電子署名に広く使用される
Diffie-Hellman 主に鍵の配布に使用 1997年に特許が失効

電子署名

データを署名するエンティティの秘密鍵により計算されるビット列
署名の検証は、署名を生成するのに使われた秘密鍵とペアの公開鍵を使う
電子署名を偽造されないためには、秘密鍵が漏洩されないこと
署名したデータは変更できない
暗号化アルゴリズム、鍵の長さの決定 → ダイジェストの生成 → 鍵の生成 → 署名 → 署名データの検証 → ハッシュコードの比較

電子証明書

公開鍵のインストール時に送信元或いはアクセス先の認証を行うための証明書 信頼される証明機関 (Certification Authority:CA) によって保証される
公開鍵及び秘密鍵の生成 → 証明書署名要求(CSR)を作成し(自己署名証明書も作成)CAに提出 → CAの証明書(トラステッド証明書)をキーストアにインポート → CA作成証明書応答をチェック → 自己署名証明書を証明書応答に置き換える → コードに署名 → 証明書をエクスポート

メッセージダイジェスト

予測や逆算が大変困難な関数またはアルゴリズムにより作成される暗号ハッシュコード デジタル(電子)指紋ともいう(?)
任意の大きさの入力データを元に固定長のハッシュコードを生成 アルゴリズムは一方向ハッシュ関数ともいう 不可逆だという前提で生成されたコードを比較
MD5 Ronal Rivestにより開発、RSAデータセキュリティ社によって配布され、フリーライセンスで使用可能 RFC1321 128ビット
SHA-1 NIST(the National Institute of Standards and Technology)によって開発されたSHA(Secure Hash Algorithm)と共に、NIST FIPS 180-1に定義される 160ビットのダイジェスト
HAVAL Yuliang Zheng, Josef Pieprzyk, Jennifer Seberryにより開発 MD5の修正版 96ビットから256ビットのハッシュコード
SNEFRU Ralph Merkleによって開発 128ビットから256ビット

JCA

Java暗号化アーキテクチャ(Java Cryptography Architecture) java.securityと共に提供される

java.securityパッケージ

電子署名・暗号化のサポート・アクセス制御リスト・メッセージダイジェストが含まれる
クラスローダ・セキュリティマネージャはjava.lang

Providerクラス

特定の暗号作成アルゴリズムを実装する提供者を表す プロバイダ名・バージョンナンバーなどにアクセスできる
電子署名アルゴリズム DSAまたはRSAを伴うMD5など
メッセージダイジェストアルゴリズム MD5/SHA-1など
暗号化アルゴリズム DES/RSAなど
パディングスキーマ PKCS#5など

Securityクラス

プロバイダの管理。セキュリティに関するプロパティやメソッドを持つ

エンジンクラス

SPI(Service Provider Interface) MessageDigest/Signature/KeyPairGeneratorなどのインターフェースが定義される
各エンジンクラスに対応するAPIの利用により実装が可能となる

Keyインターフェース

様々な鍵オブジェクトにより共用される機能を定義する
鍵のアルゴリズム・符号化された書式(X.509またはPKCS#8)・鍵の形式

Signatureクラス

電子署名APIと電子署名SPIから成る SPIのメソッドはengineXXX()という抽象メソッドを持つ
データに電子署名したり、特定の署名が認証された署名であるかの検証を行う 公開鍵が秘密鍵に対応しているかを判断できる
Signatureの状態は、UNINITIALIZED/SIGN/VERIFYがある
getInstance(algorithm) → initSign(privateKey) → update(byte
 メッセージ) → sign() → initVerify() → update(byte
 メッセージ) → verify(byte
 署名)

MessageDigestクラス

getInstance("MD5"/"SHA-1")で取得 → update → digest/reset clone()にて中間ハッシュを保存可能 isEqual()にてハッシュコードの比較

JCE

Java暗号化拡張機能(Java Cryptography Extension) Java 2 SDK v1.4から標準化された Cipher・KeyGenerator・KeyAgreementなどの機能を提供
対称バルク暗号化(DES/RC2など)・対称ストリーム暗号化(RC4など)・非対称暗号化(RSAなど)・パスワードベース暗号化(PBE)・鍵協定・メッセージ認証コード(MAC)などのAPI
SDKに含まれるJCEは制限付きバージョンであり、米国と敵対関係にない日本ではhttp://java.sun.com/j2se/1.4より無制限バージョンのJCEをダウンロード可能

KeyGeneratorクラス

対称アルゴリズム用の秘密鍵を生成する鍵ジェネレータ
getInstance(algorithm [, provider]) → void init(keysize [, secureRandom]) → SecretKey generateKey()

KeyPairGeneratorクラス

非対称アルゴリズム用の公開鍵及び秘密鍵を生成する鍵ジェネレータ 電子署名などに使用
getInstance(algorithm [, provider]) → void initialize(keysize [, secureRandom]) → KeyPair genKeyPair() → getPrivate()/getPublic()

Cipherクラス

暗号化と複合化で使用される暗号機能を提供
getInstance("DES"など)で取得 → init(ENCRYPT_MODE/DECRYPT_MODE/WRAP_MODE/UNWRAP_MODE, Key key) → update/doFinal
 (→ wrap(anotherKey) → unwrap(byte

algorithmCipher.SECRET_KEY/Cipher.PRIVATE_KEY/Cipher.PUBLIC_KEY))

CipherInputStream(inputStream, cipher) や CipherOutputStream(outputStream, cipher)も使用できる

タグ:

+ タグ編集
  • タグ:
最終更新:2007年11月15日 07:21