Javaでの暗号化について知っておくべきことすべて



この記事では、Javaでの暗号化の詳細で包括的な知識と、例での使用方法について説明します。

暗号化は、数学的アルゴリズムを使用して情報の意味を偽装し、許可された関係者だけが情報を解読できるようにする方法です。この記事では、暗号化と復号化について説明します。 次の順序で:

Javaでの暗号化の概要

暗号化は、データ(テキスト、会話、音声など)を保護するために実装されており、コンピューター上にあるか、インターネット上で送信されます。最近の暗号化テクノロジーは、安全なコンピューティング環境に欠かせない要素です。





暗号化のセキュリティの主な役割は、元の平文に戻すのが難しい暗号文(暗号化されたテキスト)を生成するアルゴリズムの機能にあります。キーの使用はまた、私たちの情報を保護する方法に別のレベルのセキュリティを作成します。キーはいくつかの情報であり、それを保持している人だけがメッセージをエンコードおよびデコードできるようにします。

Javaでの暗号化と復号化



対称暗号化アルゴリズム

対称アルゴリズムは、暗号化と復号化に同じキーを使用します。このようなアルゴリズムは、ブロックモード(固定サイズのデータ​​ブロックで機能)またはストリームモード(データのビットまたはバイトで機能)でのみ動作します。そのようなアルゴリズムまた、データ暗号化、ファイル暗号化、通信ネットワークで送信されたデータの暗号化(TLS、電子メール、インスタントメッセージなど)などのアプリケーションにも一般的に使用されます。

mysqlデータベースに接続するためのJavaプログラム

非対称(または公開鍵)暗号化アルゴリズム

暗号化操作と復号化操作の両方に同じキーを使用する対称アルゴリズムとは異なり、非対称アルゴリズムはこれら2つのステップに2つの同一のキーを使用します。これらのアルゴリズムは、デジタル署名と鍵確立プロトコルの計算に使用されます。ただし、これには2つのキーを使用する必要があるという課題もあり、事態はさらに複雑になります。



基本的な暗号化スキームを安全に構成するには、そのようなすべてのパラメーター(少なくとも)が正しく設計されていることが非常に重要です。

  • 正しいアルゴリズムを選択することが重要です。
  • 適切なタスクに適した操作モードの選択
  • 要件に応じて適切なパディングスキームを選択する
  • それに応じて適切なキーとそのサイズを選択する
  • 暗号的に安全なCSPRINGを使用した正しい初期化。

これらすべてのパラメーターを安全に構成することに注意することは非常に重要です。わずかな設定ミスでも、暗号システム全体を危険にさらし、ハッカーやその他のマルウェアからの攻撃にさらされる可能性があります。したがって、この説明を単純にするために、アルゴリズムに依存しない暗号の初期化についてのみ説明します。このような暗号化を自分で行うのではなく、RSAアルゴリズムのp値やq値など、アルゴリズムに依存する構成を専門家に構成させることをお勧めします。基本的な暗号化パラメーターを半分以上に構成するだけです。ダース、クラスが使用されます。

クラス階層の導入、多数のオーバーロードされたコンストラクタ/メソッドなど、多くの複雑さが追加され、不要になります。 Javaが基本的な構成を複雑にせず、Microsoftのようなより単純化されたアーキテクチャを採用することを望みます。このようなすべてのパラメータは、単一のクラスSymmetricAlgorithmとAsymmetricAlgorithmの境界内にあります。指定する最初の3つのパラメーター(アルゴリズム、操作モード、およびパディングスキーム)の場合、Cipherオブジェクトは変換文字列を利用します。

  • 適切なアルゴリズムの選択

変換文字列には、間違いなく暗号化アルゴリズムの名前が含まれています。対称暗号化と非対称暗号化の間には、11個のアルゴリズム(さまざまなPBEWithAndの組み合わせに関するものではありません)があり、標準アルゴリズム名のドキュメントに従って指定できます。それらのうち、実際に完全に保護されているのは2つだけ(それぞれに1つ、対称暗号化と非対称暗号化)です。

javascriptを使用したhtmlのプログレスバー

残りのアルゴリズムは過度に壊れているか(DES、RC2など)、亀裂が表面化し始めており(RC5)、十分なCPUパワーで壊れやすくなっています。これを読むまでにすでに壊れている可能性があります。セキュリティ志向の開発者は、NIST仕様の山を読んだり、暗号化コミュニティの最新の出来事や研究を追跡したりすることはできません。彼らは壊れたまたは危険なアルゴリズム、ダイジェストまたは疑似ランダムジェネレータを拾うかもしれません。

常に:

  1. 対称アルゴリズム:AES / AESWrapブロック暗号が使用されます。

  2. 非対称アルゴリズム:RSAが使用されます。

  • 動作モード

動作モードは変換の一部であり、ブロック暗号にのみ関連します。非対称暗号を使用する場合は、ECBを操作モードとして使用します。これは基本的に舞台裏でのハッキングであり、この値を無視することを意味します。 SunJCE、SunPKCS11などのJavaプロバイダーは、対称および非対称アルゴリズムのデフォルトでECBモードになっています。非対称アルゴリズムにとっては良いことかもしれませんが、ブロック暗号にとっては悪い考えです。

プロバイダーは、使用されるアルゴリズムに基づいて安全なデフォルトを作成するように指示される可能性があります。対称暗号化を使用して、リプレイ攻撃や既知の平文攻撃からユーザーを保護します。また、アルゴリズムを完全に指定する変換を使用します(つまり、その動作モードとパディングを使用します)。決して、以下のようなことは絶対にしないでください。

上記のように、AESアルゴリズムはECB動作モードで利用されるため、リプレイ攻撃が非常に簡単になります。新しい開発では、古い作業を刷新する可能性がわずかにある場合は、認証付き暗号化と関連データ(AEAD)モード(GCMやCCMなど)を使用する必要があります。完全な128ビット長の認証タグがあります。認証されていないモードを使用する場合は、CBCまたはCTRとMACを使用して暗号文を認証します。

  • 適切なパディングスキームの選択

一般的なブロック暗号モードでは、プレーンテキストの長さが、基になる暗号化アルゴリズムのブロックサイズの倍数である必要がありますが、これはめったにありません。したがって、いくつかのパディングが必要です。Javaプログラムは、対称暗号化のための3つの異なるスキームを提供します。1つは受け入れられないパディングなし、もう1つは2007年以降廃止されたISO10126パディングです。

したがって、適切なオプションはPKCS5Paddingを使用することだけです。一部の操作モード(CBCモードなど)とPKCS5Paddingパディングスキームを組み合わせると、パディングオラクル攻撃が発生する可能性があります。パディングスキームについて言及しないことは、特定の種類の攻撃にのみ影響を受けやすいスキームを提供するよりも危険です。これらの攻撃から確実に保護するには、AEADモードの操作をお勧めします。

  • 非対称アルゴリズム

非対称アルゴリズムでは、2つのパディングスキームから選択するオプションがあります。 OAEPWithAndPaddingスキームのみが使用されていることを確認することが重要です。ダイジェストの場合は、SHA1またはSHA256 / 384/512のいずれかを使用してください。マスク生成機能(MGF)については、指定されたMGF1パディングを利用してください。 RSAを使用したPKCS1Paddingは、1998年以降暗号文攻撃[6]に対して脆弱です。

ここでは、「Cipher.getInstance」メソッドで変換を使用する正しい方法について説明します。

Javaの例でxmlファイルを読む
  • 対称暗号化

  • 非対称暗号化

暗号化スキームのセキュリティレベルは、そのキーのサイズに正比例します。キーの長さは、ブルートフォース攻撃が実行不可能になるのに十分な長さであると同時に、計算​​の実行可能性を念頭に置くのに十分な長さである必要があります。さらに、今後30年間、計算の進歩に何が耐えられるかを検討する必要があります。

これで、Javaでの暗号化の記事は終わりです。暗号化と復号化、およびそれがJavaで使用される理由について理解していただければ幸いです。

チェックしてください 25万人以上の満足した学習者のネットワークを持つ信頼できるオンライン学習会社であるEdurekaが世界中に広がっています。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Java開発者になりたい学生および専門家向けに設計されています。このコースは、Javaプログラミングをすぐに開始できるように設計されており、HibernateやSpringなどのさまざまなJavaフレームワークに加えて、コアと高度なJavaの両方の概念についてトレーニングします。

質問がありますか?この「Javaでの暗号化」ブログのコメントセクションにそのことを記載してください。できるだけ早くご連絡いたします。