userSig による安全な認証
UserSigとはなにか。
UserSigとは、悪意ある攻撃者によるクラウドサービスの使用権の盗用を防ぐために、Tencent Cloudによって設計されたセキュリティ保護された署名です。
現在、Tencent CloudのTRTC、IMおよびモバイルライブストリーミングなどのサービスには、すべてこの一連のセキュリティ保護メカニズムが採用されています。これらのサービスを使用する場合、対応するSDKの初期化またはログイン関数において、SDKAppID、UserIDおよびUserSigという3つの重要情報を提供する必要があります。
このうちSDKAppIDはお客様のアプリケーションの識別に、UserIDはユーザーの識別に使用されます。UserSigは、** HMAC SHA256 **暗号化アルゴリズムによって算出される最初の2つをもとに計算されたセキュリティ署名です。攻撃者がUserSigを偽造できない限り、クラウドサービスのトラフィックを盗用することはできません。
UserSigの計算原理を次の図に示します。SDKAppID、UserID、ExpireTimeなどの重要情報をハッシュ化・暗号化することがUserSigの本質です。
//UserSigの計算式。このうちsecretkeyは、usersigを算出するための暗号化鍵です。usersig = hmacsha256(secretkey, (userid + sdkappid + currtime + expire +base64(userid + sdkappid + currtime + expire)))
説明:
currtime
は現在のシステムの時間で、expire
は署名の期限切れの時間です。上記の原理図はUserSigの計算原理を示したものです。UserSigスプライシングコードの具体的な実装方法については、クライアントのUserSigの計算およびサーバーのUserSigの計算をご参照ください。
デバッグスタート段階でのUserSigの計算方法
Demoクイックスタートを実行し、TRTC SDKの関連機能を理解したい場合は、クライアントサンプルコードとコンソールの2つの方法でUserSigを計算、取得することができます。詳細は以下の説明をご参照ください。
ご注意:
以上の2種類のUserSig取得、計算方法は、デバックにのみ適用されます。正式に製品のサービスを開始したい場合は、これらの方法の採用を推奨しません。クライアントコード(特にWeb端末)の中のSECRETKEYがいとも簡単に逆コンパイルやハッキングされるからです。一旦キーが漏れてしまえば、攻撃者がお客様のTencent Cloudトラフィックを盗用できるようになります。
正しいやり方は、UserSigの計算コードを、お客様の業務サーバー上に置いたうえで、必要に応じて、お客様のAppから、リアルタイムに算出したUserSigをサーバーに取得しにいく方法です。
クライアントサンプルコードによるUserSigの計算
1. SDKAPPIDとキーの取得:
1.1 TRTCコンソール>アプリケーション管理にログインします。
1.2 アプリケーション設定をクリックし、SDKAppIDに対応するアプリケーション情報を確認します。
1.3 基本情報のSDKSecretKeyを確認することで、UserSig計算用の暗号化鍵が取得できます。
1.4 キーのコピーをクリックします。これでキーがクリップボードにコピーされます。
2. UserSigの計算:
クライアントが利用しやすいように、各プラットフォームのUserSig計算用のソースコードファイルを提供しています。直接ダウンロードして計算することができます。
適用可能なプラットフォーム | ファイルソースコード | ファイル相対パス |
iOS | TRTC-API-Example-OC/Debug/GenerateTestUserSig.h | |
Mac | OCDemo/TRTCDemo/TRTC/GenerateTestUserSig.h | |
Android | TRTC-API-Example/Debug/src/main/java/com/tencent/trtc/debug/GenerateTestUserSig.java | |
Windows(C++) | TRTC-API-Example-C++/TRTC-API-Example-Qt/src/Util/defs.h | |
Windows(C#) | TRTC-API-Example-CSharp/TRTC-API-Example-CSharp/GenerateTestUserSig.cs | |
Web | base-js/js/debug/GenerateTestUserSig.js | |
Flutter | TRTC-API-Example/lib/Debug/GenerateTestUserSig.dart |
TRTC SDKのサンプルコードの中で
GenerateTestUserSig
という名前のオープンソースモジュールを提供しています。その中のSDKAPPID、EXPIRETIME、 SECRETKEYの3つのメンバー変数をご自分の設定に修正するだけで、genTestUserSig()
関数を呼び出して、算出されたUserSigを取得することでき、それによってSDKの関連機能をすばやくスタートさせることができます。
コンソールによるUserSigの取得
1. TRTCコンソールに進み、左側バーのアプリケーション管理>UserSig生成を選択し、署名(UserSig)生成ツールモジュールを確認します。
2. ドロップダウンリストをクリックして作成済のアプリケーション(SDKAppID)を選択します。完了すると対応するキー(Key)が自動生成されます。
3. ユーザー名(UserID)を入力します。
4. 署名(UserSig)生成をクリックして、対応する署名(UserSig)を生成します。
正式実行段階でのUserSigの計算方法
業務の正式実行段階では、TRTCがさらに高いセキュリティレベルのサーバー側UserSig計算方法を提供し、UserSig計算用のキーが漏洩しないことを最大限保障できます。それは、1つのAppをハッキングするよりも1台のサーバーを攻撃する難度の方が高いからです。具体的な実現プロセスは以下のとおりです。
1. お客様のAppがSDKの初期化関数を呼び出す前に、まずサーバーにUserSigをリクエストします。
2. お客様のサーバーがSDKAppIDとUserIDをもとにUserSigを計算します。計算ソースコードは、ドキュメントの前半部分をご参照ください。
3. サーバーが計算したUserSigをApp側に返します。
4. Appは取得したUserSigを、特定のAPI経由でSDKに渡します。
5. SDKが
SDKAppID + UserID + UserSig
をTencent CVMに送信し、検証を行います。6. Tencent CloudがUserSigを検証し、合法性を確認します。
7. 検証に合格すると、TRTC SDKにTRTCのサービスが提供されます。
お客様の実現プロセスを簡略化するため、複数の言語バージョンのUserSig計算ソースコードを提供しています(現在のバージョンの署名アルゴリズム)。
旧バージョンの署名アルゴリズムのUserSig計算ソースコード
署名計算の難度をやさしくし、お客様がよりスピーディーにTencent Cloudのサービスをご利用いただけるように、TRTCでは、2019年7月19日より新しい署名アルゴリズムの使用を開始しました。以前のECDSA-SHA256をHMAC-SHA256にレベルアップし、よって2019年7月19日以降に作成したSDKAppIDはいずれも新しいHMAC-SHA256のアルゴリズムが採用されています。
お客様のSDKAppIDが2019月7月19日以前に作成されている場合は、旧バージョンの署名アルゴリズムを引き続きお使いいただけます。アルゴリズムのソースコードのダウンロードリンクは以下のとおりです。