フロントエンドの一般的な暗号化アルゴリズムについてお話ししましょう

フロントエンドの一般的な暗号化アルゴリズムについてお話ししましょう

情報セキュリティの重要性が高まるにつれ、さまざまなフロントエンド暗号化がますます重要になっています。通常、データ転送のセキュリティを確保し、サーバーとのやり取り中にデータが他人に取得されたり改ざんされたりするのを防ぐために、https の適用に加えて、転送されるデータの暗号化と復号化も必要です。

[[325411]]

現在一般的な暗号化アルゴリズムは3つのカテゴリに分けられます

  • 対称暗号化アルゴリズム: AES、…
  • 非対称暗号化アルゴリズム: RSA、…
  • ハッシュアルゴリズム: MD5、…

2. 対称暗号化アルゴリズム

対称暗号化 (秘密鍵暗号化とも呼ばれる) とは、暗号化と復号化に同じ鍵を使用する暗号化アルゴリズムを指します。安全に通信するには、送信者と受信者がキーについて合意する必要があります。対称アルゴリズムのセキュリティはキーに依存します。キーが漏洩すると、誰でも送受信したメッセージを解読できるため、キーの機密性は通信のセキュリティにとって非常に重要です。

特徴

  • 利点: オープンアルゴリズム、計算量が少ない、暗号化速度が速い、暗号化効率が高い。
  • デメリット: データを送信する前に、送信者と受信者がキーについて合意する必要があり、その後、両者がキーを保持します。一方の鍵が漏洩した場合、暗号化された情報は安全ではなくなります。
  • 使用シナリオ: ローカルデータ暗号化、https 通信、ネットワーク転送など。

エーエス

AES: Advanced Encryption Standard は、最も一般的な対称暗号化アルゴリズムです (WeChat ミニプログラムは、暗号化された送信にこの暗号化アルゴリズムを使用します)。

キー: プレーンテキストを暗号化するために使用されるパスワード。キーは受信者と送信者の間の交渉によって生成されますが、ネットワークを介して直接送信することはできません。そうしないと、キーが漏洩することになります。通常、キーは非対称暗号化アルゴリズムを使用して暗号化され、ネットワークを介して相手に送信されるか、直接対面してキーについて話し合われます。キーは絶対に漏洩してはなりません。漏洩すると、攻撃者が暗号文を復元してデータを盗む可能性があります。

プロジェクトでAES暗号化が必要な場合は、オープンソースのjsライブラリcrypto-jsを使用できます。

  1. var CryptoJS = require( 'crypto-js' );
  2. var data = { id: 1, テキスト: 'Hello World' };
  3. // 暗号化して暗号文を生成する
  4. var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret_key_123' ).toString();
  5. // 復号して平文を取得する
  6. var bytes = CryptoJS.AES.decrypt(暗号テキスト、 'secret_key_123' );
  7. var 暗号化解除されたデータ = JSON.parse(bytes.toString(CryptoJS.enc.Utf8));

3. 非対称暗号化アルゴリズム

非対称暗号化アルゴリズムには、公開鍵 (publickey: 公開鍵と呼ばれる) と秘密鍵 (privatekey: 秘密鍵と呼ばれる) の 2 つの鍵が必要です。公開鍵と秘密鍵はペアになっています。公開鍵でデータを暗号化した場合、対応する秘密鍵でのみ復号化できます。暗号化と復号化に 2 つの異なるキーが使用されるため、このアルゴリズムは非対称暗号化アルゴリズムと呼ばれます。

特徴

  • 利点: 非対称暗号化は対称暗号化よりも安全です。
  • デメリット: 暗号化と復号化には時間がかかり、速度も遅いため、少量のデータの暗号化にしか適していません。
  • 使用シナリオ: https セッションの初期段階、CA デジタル証明書、情報暗号化、ログイン認証など。

RSAA の

RSA 暗号化アルゴリズムは、最も一般的な非対称暗号化アルゴリズムです。 RSA は、1977 年に Ron Rivest、Adi Shamir、Leonard Adleman によって提案されました。 RSA は姓の最初の文字で構成されています。

プロジェクトでRSA暗号化が必要な場合は、オープンソースのjsライブラリjsencryptを使用できます。

  1. // 公開鍵を使用して暗号化する
  2. var 公開キー = 'public_key_123' ;
  3. var encrypt = new JSEncrypt();
  4. 公開キーを暗号化します。
  5. var 暗号化 = encrypt.encrypt( 'Hello World' );
  6. // 秘密鍵を使用して復号化
  7. var privateKey = 'private_key_123' ;
  8. var 復号化 = 新しい JSEncrypt();
  9. 復号化します。秘密キーを設定します。
  10. var 暗号化されていない = decrypt.decrypt(暗号化されている);

4. ハッシュアルゴリズム

ハッシュは、一般的に「ハッシュ」と翻訳され、「ハッシュ」と直接書き起こされることもあります。ハッシュは、ハッシュ アルゴリズムを使用して、任意の長さの入力 (プレマッピング、プレイメージとも呼ばれます) を固定長の出力に変換します。出力はハッシュ値です。この変換は圧縮マッピングです。つまり、ハッシュ値のスペースは通常、入力のスペースよりもはるかに小さく、異なる入力が同じ出力にハッシュされる可能性があり、ハッシュ値から入力値を一意に特定することは不可能です。

簡単に言えば、任意の長さのメッセージを固定長のメッセージ ダイジェストに圧縮する機能です。

特徴

  • 利点: 不可逆的、計算が簡単、特徴付けられる
  • デメリット: ハッシュ衝突が発生する可能性がある
  • 使用シナリオ: ファイルまたは文字列の一貫性検証、デジタル署名、認証プロトコル

MD5

MD5 は比較的一般的なハッシュ アルゴリズムです。MD5 には 2 つの重要な特徴があります。まず、ハッシュ後のプレーンテキスト データの値は固定長です。次に、ハッシュ後のプレーンテキスト データの結果は常に変更されない必要があります。前者は、2 つのプレーンテキスト ハッシュが同じ結果を生成する可能性があることを意味し、後者は、特定のデータをハッシュすると、結果が同じになる必要があることを意味します。

例えば、ログイン時にパスワードは md5 で暗号化されてサーバーに送信されます。サーバー内のパスワードも md5 で暗号化されて保存されます。この場合、暗号化された暗号文が一貫しているかどうかを確認するだけで済みます。

プロジェクトでMD5暗号化が必要な場合は、オープンソースのjsライブラリを使用できます: JavaScript-MD5

  1. var hash = md5( 'Hello World' );
  2. // b10a8db164e0754105b7a99be72e3fe5

5. Base64エンコード

Base64 エンコーディングは単なるエンコーディング形式であり、暗号化アルゴリズムではありません。HTTP 環境でより長い識別情報を送信するために使用できます。

特徴

  • あらゆるバイナリデータはBase64でエンコードできる
  • データの暗号化後、データ量は約1/3増加します
  • エンコード後には非常に明白な特徴があり、最後に=記号があります
  • 逆デコード可能
  • Base64エンコードは読み取れません

現代のブラウザはBase64エンコードとデコードメソッドbtoa()とatob()を提供しています。

  1. var enc = window.btoa( 'Hello World' );
  2. //SGVsbG8gV29ybGQ=
  3. var str = window.atob(enc);
  4. // こんにちは世界

VI. 結論

ビジネス HTTP リクエストでは、フロントエンドで AES キーがランダムに生成され、サーバーから RSA 公開キーが取得され、AES キーが非対称暗号化され、暗号化されたキーがリクエスト ヘッダーでサーバーに渡され、本文が AES で暗号化されます。サーバーはリクエスト ヘッダー内の暗号化されたキーを受信し、それを RSA キーで復号化し、プレーンテキストの AES キーを取得して、本文を復号化できます。 md5 には文字列の一貫性を検証する機能があります。リクエストが傍受された後に本文が改ざんされるのを防ぐために、リクエストを送信するときに本文の文字列を md5 で暗号化し、リクエスト ヘッダーで送信することができます。サーバーはリクエストを受け取った後、本文を復号化し、リクエスト ヘッダーで md5 を検証して、リクエストが改ざんされていないかどうかを確認します。

<<:  COVID-19パンデミックの影響を受けて、世界のエッジAIソフトウェア市場は急速な発展を遂げている

>>:  人工知能は今日私たちに何をもたらすのでしょうか?知らないブラックテクノロジーをチェック

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

ディープラーニングは、データが不足している場合、無力なのでしょうか?ここにいくつかの良いアイデアがあります!

ディープラーニングは、データが大量にある場合、どんなに複雑な問題でも問題ありません。しかし、データが...

2020年に注目すべき8つのAIトレンド

自動化、ハードウェア、モデル開発などの新たな開発が、2020 年の AI を形作るでしょう。 O&#...

Tencent TRS: 産業実践におけるメタ学習とクロスドメイン推奨

1. メタ学習1. パーソナライズモデリングの問題点推奨シナリオでは、データの 80% 分布の問題に...

携帯電話を紛失し、電話をかけても誰も応答しません。顔認識機能は非常に役立ちます。

揚子晩報は4月12日(蒋桂東特派員、範牧暁子記者)に、揚州市在住の張さんがオランダ花海風景区を訪れた...

IntelがLoihi 2チップとLavaフレームワークを発表

インテルは、人工知能、ロボット工学などの分野におけるニューロモルフィック・コンピューティングの研究開...

IEEE テクノロジー分野賞発表: ML パイオニアがリストに、中国本土から受賞した唯一の学者は清華大学の学生

[[409353]] IEEE が再び栄誉を授与する時が来ました。 7月2日、米国電気電子学会(IE...

顔認識は簡単すぎる、AIは指の動きも認識できる、これは非常に恐ろしい

現代のコンピューター ビジョン テクノロジーは、これまで映画でしか見たことのないようなテクノロジーの...

研究により、ディープラーニングAIは乳がんリスクの予測に優れていることが判明

放射線学誌に掲載された新しい研究によると、ディープラーニングと呼ばれる高度な人工知能は、一般的に使用...

来年のビジネス インテリジェンスの見通しはどうでしょうか?

インテリジェント テクノロジーの使用が拡大するにつれて、ビジネス インテリジェンスの最新動向を常に把...

中国科学院は、プログラマーがバグを見つけるのを助けるために大きなモデルを使用し、102の論文を分析し、これらの解決策をまとめた。

中国科学院は「バグ発見」に着手し、一気に N 個の解決策をまとめました。魔法の武器は大きなモデルです...

在庫: 過去2年間の人工知能と機械学習の分野でのいくつかの買収

世界的なテクノロジー大手がトップクラスの人工知能の人材と技術をめぐる競争に参入し、市場は活況を呈して...

ドローン自動化システムの産業への応用を探る

世界中の企業は、競合他社に対して競争上の優位性を獲得するのに役立つ高度なテクノロジーを常に探していま...

人工知能は将来の戦争を防ぐことができるのか?

ロヒット・タルワール[[430155]]米陸軍兵士が発射後、管制室から全長14フィートのシャドウ監視...