Virgilで暗号化されたSMSメッセージを送信します


こんにちは、Habr!
WhatsAppやTelegramなどのモバイルメッセンジャーの人気が高まっているにもかかわらず、古き良きSMSの関連性は失われません。 SMSは、2要素認証またはパスワードのリセット時に、さまざまな種類の通知を送信するために使用できます。 しかし、最近のモバイルネットワークへの攻撃の成功により、SMSを介して送信されるデータに対する追加の保護レベルを考えています。
この記事では、VirgilおよびTwilioサービスを使用して、AndroidデバイスにSMSを送信するプロセスを安全にする方法について説明します。

プログラミングを開始する前に、いくつかの予備ステップをもう一度思い出します。
SMSを送信するには、 ここで Twilioアカウントを作成する必要があるアクセスのためにTwilio APIを使用します 。 登録後、APIの操作に必要な特別な識別子TWILIO_ACCOUNT_SIDおよびTWILIO_AUTH_TOKENを受け取ります。

SMSメッセージを暗号化するには、 Virgilアカウントを作成し、特別なトークンVIRGIL_ACCESS_TOKENを生成する必要があるVirgil Crypto LibraryとVirgil Keys Serviceの助けが必要です。

上記の手順を完了したら、SMS通知の実装に進むことができます。
Virgilサービスには、ほとんどの一般的なプログラミング言語で使用できるSDKの大きなセットがあります。 前の記事で、JavaScriptを使用してサービスを操作する方法を示しました。 今日、変更のために、 C#で投稿します。

暗号化されたSMSを送受信するプロセスを段階的に説明します。

  1. NuGetパッケージマネージャーを使用してVirgilとTwilio SDKをインストールします。

    PM>インストールパッケージVirgil.SDK
    PM> Install-Package Twilio

  2. VirgilおよびTwilio APIで動作するようにクライアントを初期化します。

    //   Twilio  string accountSid = "%TWILIO_ACCOUNT_SID%"; string authToken = "%TWILIO_AUTH_TOKEN%"; //  Twilio API  var twilio = new TwilioRestClient(accountSid, authToken); //  Virgil ,    var virgil = ServiceHub.Create("%VIRGIL_ACCESS_TOKEN%"); 

    変数accountSidおよびauthTokenに注意してください。 それらには、 ここにあるTwilioアカウントの識別子を示しています

  3. Twilioサービスへの通常のPOSTリクエストを使用して、暗号化されたメッセージの送信を実装します(パーティーに参加するためのパスワード付きの招待状を送信します)。

     //    SMS  var people = new Dictionary<string,string>() { {"+14XXXXXXXX1","Darth Vader"}, {"+14XXXXXXXX2","Luke Skywalker"}, {"+14XXXXXXXX3","Princess Leia"} }; //      Virgil Keys Service var peopleCards = await Task.WhenAll(people .Select(it => virgil.Cards.Search(number))); foreach (var personCards in peopleCards) { //   ,   var personCard = personCards.OrderBy(it => it.CreatedAt).Last(); var personName = people[personCard.Identity.Value]; //  ,        //       ( ). using (var tinyCipher = new VirgilTinyCipher(120)) { var message = $"Hey {personName}, your security word is STAR. We are waiting for you!"; var messageData = Encoding.UTF8.GetBytes(message); tinyCipher.Encrypt(messageData, personCard.PublicKey.Value); //   ,   ,    SMS  //  160-  (120   base64 ). for(int index = 0; index < tinyCipher.GetPackageCount(); index++) { var encryptedMessage = Convert.ToBase64String(tinyCipher.GetPackage(index)); //      Twilio API twilio.SendMessage( SMS.Constants.TwilioPhoneNumber, //  ,  Twilio   SMS personCard.Identity.Value, //    encryptedMessage); } } } 

  4. 受信者側でメッセージを解読します。 SMSを受信するには、Android SMS APIを使用します。 メッセージを復号化するには、Virgil SDK for .NETも必要です。

     //  ,        120 . var tinyCipher = new VirgilTinyCipher(120); //  message    private void OnSmsReceived(string from, string message) { //     ,       //  ,      . this.tinyCipher.AddPackage(Convert.FromBase64String(message)); if (this.tinyCipher.IsPackagesAccumulated()) { var decryptedData = this.tinyCipher.Decrypt(this.myPrivateKey); var decryptedMessage = Encoding.UTF8.GetString(decryptedData, 0, decryptedData.Length); this.tinyCipher.Reset(); Application.Current.MainPage.DisplayAlert($"From: {from}", decryptedMessage, "Got It"); } } 


TwilioとVirgil APIでわかるように、暗号化されたSMSの送受信は、暗号化の深い知識を必要としない単純なタスクになります。

PS


GitHubで暗号化されたSMSの送信を実装するソースコードをダウンロードできます。

Source: https://habr.com/ru/post/J304286/


All Articles