Javaセキュリティ暗号化


安全な暗号化
目次
1暗号化セキュリティ1
1.1アプリケーションのセキュリティ1
1.2暗号学の分類1
1.2.1対称暗号化1
1.2.2非対称暗号化2
1.2.3一方向暗号化2
2 JAVAのセキュリティサポート3
1暗号化セキュリティ
1.1アプリケーションのセキュリティ
「何を持ってあなたを保護しますか?私のアプリケーション?」これはほとんどのアプリケーションシステムが注目しなければならない問題です.
答えは「アプリに鍵をかけろ!」です.
ロックの追加方法:
(1)アクセス制御:RBAC(Role Basic Access Control)ユーザロールベースのアクセス,デジタル署名など,ユーザに対して鍵をかける.
(2)データ暗号化:対称暗号化されたデータ記憶、ハッシュ関数によるデータ整合性の検証など、データに鍵をかける.
1.2暗号学の分類
アプリケーションの安全のために、アプリケーションにロックをかける必要があります.ロックは暗号学から離れられません.
暗号学は暗号化アルゴリズムに大きく分けて一方向暗号化アルゴリズム,対称暗号化アルゴリズム,非対称暗号化アルゴリズムの3種類に分けられる.MD 5,SHAアルゴリズムは一方向暗号化アルゴリズムの代表であり,一方向暗号化アルゴリズムはデータ整合性検証の常用アルゴリズムである.DESアルゴリズムは典型的な対称暗号化アルゴリズムの代表であり、対称暗号化アルゴリズムはデータ記憶暗号化の一般的なアルゴリズムである.RSAアルゴリズムは典型的な非対称暗号化アルゴリズムであり、非対称暗号化アルゴリズムはデータ伝送の常用アルゴリズムであり、対称暗号化アルゴリズムもデータ伝送暗号化に用いることができるが、非対称暗号化は鍵管理の面でより優位である.対称暗号化アルゴリズムに対して、非対称暗号化アルゴリズムはセキュリティレベルでより高いが、非対称暗号化アルゴリズムは時間効率的に対称暗号化アルゴリズムに及ばない.
1.2.1対称暗号化
対称暗号アルゴリズム(Symmetric Cipher):単一鍵暗号アルゴリズムまたは秘密鍵暗号アルゴリズムとも呼ばれる.よく見られるのはDES、AESアルゴリズムなどです.
対称暗号体質は暗号化と復号化に同じ共有鍵を使用することを要求し,復号は暗号化の逆演算である.
対称パスワードには2つあります.1つは、明文(またはバイト)を演算することで、ストリームパスワードと呼ばれ、シーケンスパスワードとも呼ばれます.もう1つは、明文情報を異なるグループ(またはブロック)機構に分割し、各グループ(またはブロック)をそれぞれ暗号化および復号化し、グループパスワードと呼ぶ.
(1)ストリーミングパスワード:ストリーミングパスワードは軍事、外交などの機関部門の中で最も広く応用されている対称パスワード体重であり、携帯電話応用プラットフォームで最もよく使われる暗号化手段でもある.ストリームパスワードは、ビット単位の暗号化および復号化であり、暗号化および復号化は、モードn演算のような簡単な演算であってもよい.
ストリーム・パスワードは、同期ストリーム・パスワードと自己同期ストリーム・パスワードに分けられます.
同期ストリームパスワード:情報送信者と受信者は情報を伝達する時、同期して暗号化と復号操作を行い、明文と暗号文は一つ一つ対応し、暗号文の内容が伝送中に改ざんされ、削除または挿入されると、同期に失敗し、暗号文の復号に失敗する可能性があり、必ず再同期を通じて暗号文の復号と復元を実現しなければならない.暗号文の伝送中に、1つの暗号ビットが変化すると、そのビットの変化はそのビットの回復に影響し、後続の暗号ビットには影響しない.これは同期ストリーム暗号の重要な特徴である.
自己同期ストリームパスワード:同期ストリームパスワードと比較して、自己同期ストリームパスワードは記憶変換されたパスワードです.各鍵は、生成された暗号文によって決定される固定数のビット数の生成に関係する.暗号文の伝送中に、1つの暗号ビットが変換されると、そのビットの変化は、nビットなどの後続の有限ビットの暗号ビットの正確な復号に影響する.したがって,自己同期ストリームパスワードは誤って伝達される現象がある.しかし、nビットの正しい暗号子を受信すると、パスワード自体が再同期される.1つの特徴に基づいて、アクティブ攻撃側チームの暗号文が修正された場合、受信側は依然として暗号文の完全性を検出できない.同期ストリームのパスワード解析は、同期ストリームのパスワードに比べて困難であり、セキュリティが高い.従って,自己同期ストリーム暗号は自己同期性,誤り伝達有限性,アクティブ攻撃性,明文統計拡散性の4つの特性を有する.
現在、多くのストリームパスワードが使用されているのは自己同期ストリームパスワードであり、ストリームパスワードの一般的なアルゴリズムはRC 4やSEALなどである.
(2)グループパスワード:パケットパスワードはネットワーク暗号化に多く応用され、対称パスワード体制の中で最も完備したパスワード体制である.パケットパスワードは、パケット長と呼ばれる固定長の平文のセットを暗号化するものである.パケット長は、パケットアルゴリズムのセキュリティに比例するパケットパスワードのパラメータであり、その値範囲はアプリケーション環境に依存します.パケット長が長ければ長いほど、暗号解析が困難になり、セキュリティが高くなり、パケット長が短くなるほど、操作と演算が容易になり、実用性が高くなります.一般的なパケット長は56ビットに設定されているが、暗号学の発展に伴い、パケット長は56ビットしかアルゴリズムの安全性を確保できず、現在、パケットパスワードは128ビットを多く選択している.
パケット暗号化の暗号化プロセスは、1つのパケット長nビットの明文を暗号化し、それに応じて1つのnビットの暗号文パケットを生成することであり、異なるnビットの明文パケットは2つのn次方個を共有していることがわかる.パケット暗号化アルゴリズムにはDES,AESなどがある.
1.2.2非対称暗号化
非対称暗号アルゴリズム(Asymmetric Cipher):二重鍵暗号アルゴリズムまたは公開鍵暗号アルゴリズムとも呼ばれる.RSAアルゴリズムのような一般的なアルゴリズム.
非対称暗号体質の暗号鍵と復号鍵は異なり、2つの鍵に分けられ、1つは公開され、1つは秘密保持され、公開された鍵は公開鍵と呼ばれ、秘密保持された鍵は秘密鍵と呼ばれている.非対称暗号体質は,送信者と受信者が鍵なしで伝送する秘密通信を可能にする.メッセージの転送には公開鍵と秘密鍵が共同で参加する必要があり、公開暗号化を使用するには秘密鍵の復号が必要であり、逆に秘密鍵の暗号化には公開鍵の復号が必要である.
デジタル署名:アプリケーションのセキュリティでは、デジタル署名によってユーザーのアイデンティティとデータ認証を確保することもできます.非対称パスワードの応用です.一般的なデジタル署名アルゴリズム:DSAアルゴリズム.
1.2.3一方向暗号化
単項暗号化アルゴリズムには、有名なMD 5アルゴリズム、ハッシュ関数などがあります.
ハッシュ関数はハッシュ関数、メッセージ要約とも呼ばれます.ハッシュ関数の主な役割は、データの暗号化と復号化を完了することではなく、データの整合性を検証する重要な技術です.ハッシュ関数を使用すると、データの数値フィンガープリント(ハッシュ値:通常は短いランダムアルファベットと数値からなる文字列)を作成できます.情報送受信双方の通信前に具体的なハッシュアルゴリズムが協議されており、このアルゴリズムは開示されている.メッセージが転送中に改ざんされた場合、メッセージは取得されたデジタルフィンガープリントと一致しません.よく使われるハッシュアルゴリズムは、MDメッセージ要約アルゴリズム、SHAセキュリティハッシュアルゴリズム、MACメッセージ認証アルゴリズムである.
2 JAVAのセキュリティサポート
Javaのセキュリティサポートは、次の4つのセクションに分けられます.
(1)JCA(Java Cryptography Architecture):証明書、デジタル署名、メッセージ要約、鍵ペアジェネレータなどのjava基本暗号化フレームワークを提供します.JCAの実装は主にパッケージjava.securityパッケージ(およびそのサブパッケージ)にある.
(2)JCE(Java Cryptography Extension):Java暗号化拡張パッケージ、JCEはJCAに基づいて拡張され、メッセージ要約や鍵管理機能、DESアルゴリズム、AESアルゴリズム、RSAアルゴリズム、DSAアルゴリズムなど、様々な暗号化アルゴリズムが提供され、JCEの実現は主にjavax.cryptoパッケージ(およびそのサブパッケージ)にある.
(3)JSSE(Java Secure Sockets Extension):javaセキュリティソケット拡張パッケージ、JSSL(Secure Sockets Layer)ベースの暗号化機能を提供する.データ通信の安全を保証した.JSSEの実装は主にjavax.net.sslパッケージにある.
(4)JAAS(Java Authentication and Authentication service):java認証uセキュリティサービス、JAASはjavaプラットフォーム上でユーザー識別を行う機能を提供し、標準セキュリティメカニズムに合致するログインモジュールをどのように提供し、構成によって各システムに統合するか、これはJAASによって提供される.
JCAとJCEはjavaプラットフォームが提供するセキュリティと暗号化サービスのための2組のAPIであり、これらはアルゴリズムを実行せず、アプリケーションと実際のアルゴリズム実装プログラムを接続するインタフェースのセットである.
暗号化アルゴリズムは国防軍事などの多くの重要な分野に及ぶため、米国の輸出制限規定によると、JCAは輸出可能であり、JCEは一部の国に対して輸出を制限し、JCA暗号化Sun社に対してデフォルトでいくつかのパッケージ実装を提供し、JCEセキュリティ実装にはいくつかのソフトウェアメーカーがJCE製品を提供する必要があり、ソフトウェア開発者はJCEインタフェース(セキュリティプロバイダインタフェースとも呼ばれる)に基づいて様々なアルゴリズムを実装した後、provider(セキュリティプロバイダ)にパッケージ化してjava実行環境に動的にロードします.BouncyCastle JCEのように、セキュリティプロバイダの1つです.
Javaセキュリティアーキテクチャは拡張方式を通じて、より多くのアルゴリズムの実現と相応のセキュリティメカニズムを加えている.
Java実行環境jre 7libsecurityディレクトリの下に入ると、java.securityファイルにセキュリティプロバイダの構成情報が表示されます.

security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=sun.security.ec.SunEC
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI

これらのプロバイダはprovider(java.security.Provider)のサブクラスです.ここでsun.security.provider.Sunは基本セキュリティプロバイダであり、sun.security.rsa.SunRsaSignはRSAアルゴリズムを実装するプロバイダである.
セキュリティプロバイダは2つの概念の抽象を実現した:エンジンとアルゴリズム、エンジンは操作と理解することができて、例えば暗号化、復号など、アルゴリズムは操作がどのように実行するかを定義して、1つのアルゴリズムは1つのエンジンの具体的な実現と理解することができます.
JAva.securityパッケージではProviderクラスとSecurityクラスが共にセキュリティプロバイダの概念を構成している.
実行コード:
Provider[] providers = Security.getProviders();
		
		for (Provider provider : providers) {
			System.out.println(provider.getName());
		}

出力結果:
SUN
SunRsaSign
SunEC
SunJSSE
SunJCE
SunJGSS
SunSASL
XMLDSig
SunPCSC
SunMSCAPI

****************************
未完待機