こんにちは
エンドツーエンド暗号化を簡単かつ簡単に実装できるコードをすでに示しました。 先に進み、Virgil Securityサービスを使用して安全なIPメッセンジャーを開発しましょう。 組み込みの暗号化を使用して安全なIPメッセンジャーを実装するのは簡単なことではありません。 この記事では、 Virgil APIとTwilio IPメッセージングAPIを使用して 、このプロセスをより簡単にする方法を説明します。
パート1:準備
メッセンジャーの実装を進める前に、いくつかの準備手順を実行する必要があります。
- Twilioアカウントを作成します。 Twilioは、コミュニケーションツールをサービスとして提供する会社です。 Twilioを使用すると、 IPメッセンジャーを開発するタスクが大幅に簡素化されます。 しかし、この記事では、私たちの目標ははるかに野心的です。 エンドツーエンド暗号化を備えた安全な(匿名と混同しないで)IPメッセンジャーが必要であることをお知らせします。 したがって、必要なのは...
- Virgil Securityアカウントを作成します。 アカウントは、アプリケーションを登録して、Virgil Securityサービスを使用できるようにする秘密キーであるVIRGIL_ACCESS_TOKENを受け取る機会を開きます。
上記の手順を完了すると、以下の一連のパラメーターの所有者になります。
- TWILIO_ACCOUNT_SID-Twilioアカウントの識別子(アカウントで利用可能)。
- TWILIO_API_KEY-認証に使用される秘密鍵( ここで生成できます )。
- TWILIO_API_SECRET-認証に必要な追加の秘密情報( ここで作成)。
- TWILIO_IPM_SERVICE_SID-Twilioサービスのインスタンス。アプリケーションに関するすべてのデータを格納します( 参照により作成できます)。
- VIRGIL_ACCESS_TOKENは、Virgil Security APIにアクセスできるようにする一意のトークンです。 各APIリクエストにはVIRGIL_ACCESS_TOKENが含まれている必要があります。 こちらで Virgilアプリケーションを作成した後に入手できます 。
- VIRGIL_APP_PRIVATE_KEYは、Virgilアプリケーションの秘密鍵です。 Identity Serviceの使用が望ましくない場合にユーザーの公開鍵を認証するための検証トークンを作成するために使用されます。 秘密鍵は、Virgil Webサイトに入った後、アプリケーションのページでコンピューター上に生成されます。
- VIRGIL_APP_PRIVATE_KEY_PASSWORD-すべての秘密鍵は暗号化された形式で保存され、鍵を使用するたびに暗号化のためのパスワードが必要です。
パート2:基本
Twilio IPメッセンジャーでのメッセージの送受信は、チャネルを使用して行われます。 各チャネルは個別のチャットであり、同時にチャットできる人数は無制限です。 Twilio IPメッセンジャーに基づいて、メッセージ暗号化機能の実装の重要な瞬間を示します。
まず、Virgil Securityサービスの使用は、ほとんどすべてのプラットフォームおよびプログラミング言語で可能です。 開発者はさまざまなSDK ( C# 、 C / C ++ 、 Objective-C 、 Python 、 Java )を利用できるため、Virgil Servicesとの連携が容易になります。 ただし、VIRGIL_ACCESS_TOKENなしでは使用できません。 なぜなら 準備段階ですでにVIRGIL_ACCESS_TOKENを受け取りました。開発に直接進みます。
私たちのメッセンジャーはクライアントサーバー構造を持ちます。 しかし、最も興味深いもの(メッセージの暗号化、送信、復号化)はすべてクライアント側にあり、私たちはそれにほとんどの注意を集中します。
- TwilioおよびVirgil API用のJavaScript SDKが含まれています。
<script src="https://cdn.virgilsecurity.com/packages/javascript/sdk/1.4.6/virgil-sdk.min.js" integrity="sha256-6gsCF73jFoEAcdAmVE8n+LCtUgzQ7j6svoCQxVxvmZ8=" crossorigin="anonymous"></script> <script src="https://media.twiliocdn.com/sdk/js/common/v0.1/twilio-common.min.js"></script> <script src="https://media.twiliocdn.com/sdk/rtc/js/ip-messaging/v0.10/twilio-ip-messaging.min.js"></script>
- サービスを使用して作業を初期化します(サーバーからAPIを使用するためのトークンを取得します)。
// Twilio var accessManager = new Twilio.AccessManager('%TWILIO_TOKEN%'); var messagingClient = new Twilio.IPMessaging.Client(accessManager); // Virgil var virgil = new VirgilSDK("%VIRGIL_ACCESS_TOKEN%");
- Virgil SDKを使用して、新しいユーザーAliceのキーペアを作成します。
var keyPair = virgil.crypto.generateKeyPair();
そして、次のものが得られます。-----BEGIN PUBLIC KEY----- MFswFQYHKoZIzj0CAQYKKwYBBAGXVQEFAQNCAAQO8ohmBRyclmcfQ38Lwmvv4Cau jyX6vWn8kJrR0RRfFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -----END PUBLIC KEY----- -----BEGIN EC PRIVATE KEY----- MHkCAQEEIFB+lOUvbb4WX+e3zLkAcYpvZR3qpQI8Ru/tcnciCMkIoAwGCisGAQQB l1UBBQGhRANCAAQO8ohmBRyclmcfQ38Lwmvv4CaujyX6vWn8kJrR0RRfFQAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -----END EC PRIVATE KEY-----
- 通信の他の参加者が暗号化されたメッセージをアリスに送信できるようにするには、彼女の公開鍵をVirgil Keysサービスのキーストアに配置する必要があります。 鍵公開プロセスには、未確認の鍵の作成を防ぐために特別な検証トークンが必要です。 Identity Serviceを使用して、またはVIRGIL_APP_PRIVATE_KEYを使用して自分で(サーバー側で)生成することにより、検証トークンを取得できます。
VirgilSDK.utils.generateValidationToken( 'Alice', // 'username', // ( ) VIRGIL_APP_PRIVATE_KEY );
検証トークンを受け取ったら、ユーザーの公開キーをリポジトリにロードします。
var options = { public_key: keyPair.publicKey, private_key: keyPair.privateKey, identity: { type: 'username', value: 'Alice', validation_token: '%VALIDATION_TOKEN%' } }; virgil.cards.create(options).then(function (card){ myCard = card; console.log(card); });
上記の手順を完了すると、Virgilカードと呼ばれるアプリケーションのすべてのユーザーがアクセスできるVirgil Keysサービスキーストアに、次のフィールドを含む特別なデータ構造が作成されます。
作成されたVirgil Cardデータ構造の例:{ "id":"3e5a5d8b-e0b9-4be6-aa6b-66e3374c05b3", "authorized_by":"com.virgilsecurity.twilio-ip-messaging-demo", "hash":"QiWtZjZyIQhqZK7+3nZmIEWFBU+qI64EzSuqBcY+E7ZtKPwd4ZyU6gdfU/VzbTn6dHtfahCzHasN...", "created_at":"2016-05-03T14:34:08+0000", "public_key":{ "id":"359abe31-3344-453a-a292-fd98a83e500a", "public_key":"-----BEGIN PUBLIC KEY-----\nMFswFQYHKoZIzj0CAQYKKwYBBAGXVQEFAQNCAAQ...", "created_at":"2016-05-03T14:34:08+0000" }, "identity":{ "id":"965ea277-ab78-442c-93fe-6bf1d70aeb4b", "type":"username", "value":"Alice", "created_at":"2016-05-03T14:34:08+0000" } }
- これで、アリスは安全な通信の準備ができました。 このための「一般」チャネルを作成しましょう。
// twilioClient.createChannel({ friendlyName: 'general' }).then(function(channel) { generalChannel = channel; });
- 誰でも「一般」チャネルに入り、アリスに暗号化されたメッセージを送信できます。 これを行うために、Virgil Keys Serviceリポジトリでアリスの公開鍵を見つけ、それを使用して秘密メッセージを暗号化します。
// Promise.all(generalChannel.getMembers().map(function(member) { // Virgil Card return virgil.cards.search({ value: member.identity, type: 'username' }) .then(function(cards){ return { recipientId: cards[0].id, publicKey: cards[0].public_key.public_key }; }); }).then(function(recipients) { var message = $('#chat-input').val(); var encryptedMessage = virgil.crypto.encryptStringToBase64(message, recipients); generalChannel.sendMessage(encryptedMessage); console.log(encryptedMessage); });
暗号化されたメッセージは次のとおりです。MIIDBQIBADCCAv4GCSqGSIb3DQEHA6CCAu8wggLrAgECMYICvDCCAVoCAQKgJgQkMDg3YjgwYmMtMzNjYi00MTI1LWI4YTgtYTE
3OTEwM2Y3ZjRkMBUGByqGSM49AgEGCisGAQQBl1UBBQEEggEUMIIBEAIBADBbMBUGByqGSM49AgEGCisGAQQBl1UBBQEDQgAEcd
8fhKqYlZxvcmmodg7Z3PNhE1LXLJqobouEcRfZaRMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAYBgcogYxxAgUCM
A0GCWCGSAFlAwQCAgUAMEEwDQYJYIZIAWUDBAICBQAEMEaJMAvX7S + 52BpI5hYyFOc0noIc + qdFFrQanNAtNGBAX / Pxeg5yJ2iA
JijyZ8ut9zBRMB0GCWCGSAFlAwQBKgQQ81bklcNOyU / QTatCigSzoAQwHnAcbXk0daExIIS + sr6aIvVuF / o6j + 1Rs5bvq2WVN41
k / Oir5x7KZTSR7v3nx + fTMIIBWgIBAqAmBCRmNzM4YTUwNi1hMDYwLTQ1MDgtYTJkYS04NjY1NjZlYzg0ODMwFQYHKoZIzj0CAQ
YKKwYBBAGXVQEFAQSCARQwggEQAgEAMFswFQYHKoZIzj0CAQYKKwYBBAGXVQEFAQNCAARJ5C3hsYuI2Sf14k60Dz5Mv5yD / AsVA
zPfsmlreGTC2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBgGByiBjHECBQIwDQYJYIZIAWUDBAICBQAwQTANBglg
hkgBZQMEAgIFAAQwhu7WM1rff9RYsQ + dmfX9Os3Irwm4cm5bIvUlcGXlCfmEsrjTyTg5MGjYLtxbYtL9MFEwHQYJYIZIAWUDBAE
qBBCfKdP / gZnkVwJvv4Hdf2eWBDC3czBjV / yPGeGTqBIilHSsrqwK7lVMTBuKR + mR3eNdh + yBIAcOk4rveSUbDuWagDIwJgYJKo
ZIhvcNAQcBMBkGCWCGSAFlAwQBLgQMfjkCvK3UgXdorcYUmtCHHuSm4yfBacMsniMADAeos7qN7OmNsFU1
同時に、この記事はテキストメッセージに関するものであるにもかかわらず、バイナリデータ(画像、音声、またはビデオ)を暗号化できることを忘れないでください。
- 彼女宛のメッセージを復号化するには、アリスは秘密鍵を使用する必要があります。秘密鍵は彼女と一緒にのみ保存されます。
// generalChannel.on('messageAdded', function(message) { // , Card Id var decryptedMessage = virgil.crypto.decryptStringFromBase64( message.body, myCard.id, keyPair.privateKey ); console.log(message.author + ': ' + decryptedMessage); });
そして、メッセージテキストを受け取りますボブ:こんにちはアリス!
パート3:最終
ご覧のとおり、組み込みのエンドツーエンド暗号化を使用したIPメッセンジャーの作成は非常に簡単です。 もちろん、あなたのメッセンジャーは、どんなプログラミング言語でも、どんなプラットフォームでも書くことができますが、暗号化の実装は常にシンプルなままです。
新しいチャンネルを作成し、 リンクを使用してメッセージを暗号化する機能を備えたメッセンジャーのデモ版を見ることができます。
Virgil + Twilio IPメッセンジャーのデモバージョンのソースコードは、 GitHubにあります 。
さまざまなプログラミング言語でVirgil Securityを操作するためのすべてのチュートリアルは、 ここから入手できます 。
UPD
ワーカーのリクエストに応じて、説明したメッセンジャーを使用するためのいくつかのオプションをリストします。
- インスタントメッセージシステムを独自のアプリケーションに埋め込みます。 これにより、ユーザーはサードパーティのアプリケーションなしで通信できます。
- ウェブサイトにメッセンジャーを追加して、販売サービスなどと直接通信します。 サポート。
- 組織で使用されるツール(ワークフローシステムなど)にメッセンジャーを追加する。 これにより、社内のコミュニケーションに追加のツールを使用する必要がなくなります。