ここでは、Node HTTPS: サーバー上で実行される API 呼び出しとして提示される、いくつかの一般的なPretty Good Privacy (PGP)プリミティブ関数を示します。
これらの関数は、電子メール メッセージング プラグインを実装するために操作されるような单一のものではありませんが、通常情况的な関数を呼び出してより大きなプロセスをサポートするユーザー登録およびログオン認証アプリケーションを対象としています。ここに示す理论依据とコードは簡単に適応でき、 で共同拥有されています。
PGP は、通常はRSA暗号化方式に基づく公開鍵暗号 (PKC)スキームの実装です。
PGP は普通、電子メール メッセージの落款と暗语化に运用され、受信者によって検証および復号化されます。もう 1 つの大きな适用范围は、ファイルとドライブを暗语化してその的内容を保護することです。 PKC/PGP の性质により、このような交換またはトランザクションの缴纳者の ID が互いに識別也许になることに小心してください。実際、私たちのユースケースはスキームのこの側面に基づいています。
これは、関連する概念と方法のいくつかの適切な説明を提供する PKC スキームに関する記事です: //gzht888.com/public-key-cryptography-simply-explained-e932e3093046 。
密令化の技術または的方法としての PGP は、かなり前から借助能够であり、大多の異なる言語およびプラットフォームでコーディングまたはプログラムされています。
私たちが使用するごく最近のopenPGPjs JavaScript 実装は、Nodejs で非同期 API として記述されており、次のリポジトリにあります: 。
Server.js API プログラム シェル
呼び出し元からの POST フォーム送信を运行する Express Nodejs API フレームワークを介して、openPGPjs の関数へのインターフェイスを带来します。
以下は、Nodejs server.js API プログラムのヘッダー コードです。コードのこのセクションは、組み込むために必要なモジュールを示しています。
このヘッダー コードに続いて、提拱するさまざまな機能の API エントリ ポイントをいくつか挿入しました。これらのさまざまな API 関数をリストした後、HTTPS: サーバーを API 関数用にセットアップして実行するコードの最後の簡単なセクションがあります。
私たちの API は、アクティビティの過程で而言のオブジェクトを処理します。これらのオブジェクトの有一部电影はデータベース内のテーブルに格納され、1 つは別のデータ テーブルの项目から生成二维码されます。
データ テーブルの使用については後で詳しく説明しますが、次のコード ブロックは Node モジュールusersdb_conn.js用であり、API 関数内で一般的に使用するユーザーのmySQLデータベースに接続します。
Server.js PGP 関数
一样的な API シェルについて説明したので、それがユーザーに信息提示する機能を見てみましょう。
キージェネレーター機能
ほとんどすべての PGP 機能は、その決定と操作的において 3 つの比较重要なオブジェクトのうちの 1 つ综上所述を适用します。これらのオブジェクトの曾经のものはユーザー オブジェクトです。この場合、POST メッセージを通じて给予されたユーザーの電子メール アドレスを动用してデータベースから抽去したユーザーに関するデータから添加されます。このユーザー データベースの知识は、登録プロセスの別の环节で很多年に入力されたものです。ここで、一些のリストでは、キー ジェネレーター関数を呼び出すために用される POST 规范と、構成ファイルからキー タイプとキー ビット長を达成する関数、および既定のユーザー データ値を抽取するために用する関数を確認できます。データベーステーブルから。
接下来の次のリスト セクションでは、上記で有した名、姓、パスフレーズ、および電子メールのデータ値を适用して、openPGP キー提取関数を呼び出しています。このデモ バージョンでキーが提取されると、それぞれのキーも適切なファイルに書き込まれます。
次の 2 つの関数は、公開鍵と奥秘鍵のデータ テーブルに公開鍵と奥秘鍵のレコードが有するかどうかをチェックします。この情報を安全使用して、この下のリストに示すように、新しいキーを挿入するか、既存のキーを置換/的更新するかを決定します。
この次の関数は、デモ绘制キー API POST を送信したユーザーのブラウザに、成功率を収めたバナーのメッセージ ページを表现します。
上記で調べたこの keygenWebpage 成功失败バナー数字代表ページ コードは、API のキー ジェネレーター POST セクションで利用される最後の関数です。これらの個々の関数がユーザー鍵ペアを绘制するという必需性のタスクを達成するためには、これらの関数をキューに入れ、各関数でタスクに適した順序で実行し、タスク リストに寄与するメソッドが必需です。 .したがって、これまで説明してきたキー ジェネレーター API 呼び出しのメイン コードは、この「performAsyncFunctions」モデル関数の一台として実行されます。これは、各関数を順次実行し、各関数が结束了するのを待ってから次の関数に進む非基期関数コントローラーです。
キー ジェネレーターの結果
このキー ジェネレーター API 呼び出しが実行されると、基本上、テキスト メッセージの密令化または復号化、摘要または検証に用到される 3 つのオブジェクトがすべて用到几率になります。
次のセットアップの下に示すsendPost.htmlという名前の単純な HTML メニュー ページを使用して、API から利用可能な呼び出しをデモンストレーションまたは実行します。
これは、API サーバーに POST 的标准を送信する基本上的な HTML フォームであり、キー ペアを作为するための 3 つのエントリは、次に示すこのコードで実装されます。
最後に、このデモでは、キー生成プロセスの完了を知らせるバナー ページを表示します。この完成により、PGP スキームで使用する 3 つのコア オブジェクトが生成されます。 1 つは、 firstname 、 lastname 、 passphrase 、およびemail addressの属性を持つuserオブジェクトのものです。
鍵ジェネレーターは、公開鍵オブジェクトと秘密鍵オブジェクトという 2 つの追加の新しいオブジェクトを作成しました。
コンソール ログは、さまざまな機能の結果と進行状況を说明するために用到されます。これは、キー ジェネレーターのデモを実行した場合のコンソール ログの例です。
3 つのオブジェクトに対する 4 つの操作
API 実装で使用する 4 つの重要な操作があります。これらの操作は、メッセージの暗号化、メッセージの署名、メッセージの復号化、およびメッセージの検証です。
メッセージの暗号化と署名、または復号化と検証の両方が可能であるため、キー ジェネレーター以外の 6 つの一般的な関数の表が得られます。
メッセージの口令化では送信者の公開鍵が动用され、メッセージの復号化では受信者の机密鍵とパスフレーズが动用されるため、これらの補完的な进行操作では補完的なキーが动用されます。メッセージ签字では签字者の这个秘密鍵とパスフレーズが选择されますが、検証では同様に補完的な方式で公開鍵が选择されます。メッセージの口令化またはメッセージの復号化は、最も普通的な PGP 機能の 2 つです。それらが API でどのように実装されているかを見てみましょう。
メッセージを暗号化する
下面に示すこのコードは、密令化 API 呼び出しの始まりです。ご覧のとおり、最开始に POST メッセージから送信者または口令化者の電子メール アドレスを具有し、続いて口令化するプレーンテキスト メッセージを口令化者の公開鍵と共に具有します。 API 呼び出しで带来了した電子メールに基づくデータベース テーブル。
送信者の公開鍵とともに暗语化したい平文メッセージを得到したら、次に示すように、openPGP 関数を动用してメッセージを暗语化し続けることができます。このデモでは、密令化されたファイルをディスクに書き込んで API 呼び出しを終了します。
上記の Encrypt API 呼び出しで在使用されるこれらの関数はすべて、「performEncryptAsyncFunctions」非减幅関数を閉じることによって显示された順序で実行され、上記の待機中の関数のシーケンスがエンキューされます。デモでは、この呼び出しに対して API ユーザーに完事メッセージは表现されませんが、下に示すようにサーバー ターミナルにログ ファイルが表现されます。
メッセージを復号化する
密令化されたテキスト メッセージを入坑したら、その平文または密令化されていない方式を読みたいと思うかもしれません。もちろん、これには次のコードによって実行される復号化のプロセスが伴います。まず、ユーザーの電子メール アドレスの POST メッセージを介绍し、続いてファイルから暗语化されたメッセージを読み取る関数を実行します。
このユース ケースでの復号化には、秘密鍵とパスフレーズの両方が必要です。ここに示すように、ユーザー データベースからパスフレーズを抽出します。
私たちの PGP スキームは、このパスフレーズでキーを暗号化することを含むキーの「アーマー化」と呼ばれるプロセスによって、追加レベルの保護を提供します。
これら 2 つの前の関数に加えて、データベースから秘蜜鍵を具有する追加の関数があります。
これらのオブジェクトを适用すると、下のリストの最原始の 2 つの関数を适用して、メッセージを復号化し、平文をファイルに储存できます。
もう1度、上に示したように、「performAsyncFunctions」コンストラクトを动用して、待機リスト内の各関数を順番に実行します。 Encrypt API 呼び出しで行われたように、この Decrypt API 呼び出しによって展示されるインタラクションは、下のログの例に示すように、コンソール ターミナルに指出されるテキストで構成されます。
その他の API 呼び出し
鍵の生成、メッセージの暗号化、およびメッセージの復号化の 3 つの主要な機能に加えて、コードは、暗号化と署名および復号化と検証のAPI 呼び出しと共に、署名と検証である他の 4 つの API 関数も提供します。
これらの API のコードとターミナル ログの結果は、 の GitHub リポジトリに含まれています。この Node プログラムを Linux (Ubuntu20) 上のサービスとして実行するためのコードも、GitHub リポジトリに含まれています。
結論
このコードは、本番対応のユーティリティとしてではなく、デモおよび NodeJS API の例として記述されています。うまくいけば、それが私自己本身のデモの例として書いたことがわかります。それはあなた自我の目地に簡単に適応できるはずです。コメントや提议は大歓迎です。
も公開