Tencent Cloudのご紹介
UserSigの紹介
-
UserSigは、悪意のある攻撃者がクラウドサービスを使用する権利を悪用するのを防ぐために、Tencent Cloudによって設計されたセキュリティ保護署名です。
-
現在、Tencent Cloudのモバイルライブ配信(MLVB)、リアルタイム音声ビデオ通信(TRTC)、およびインスタントメッセージング(IM)サービスは、この一連のセキュリティ保護メカニズムを採用しています。 これらのサービスを使用するには、対応するSDK初期化またはログイン関数でSDKAppID、UserID、およびUserSigキー情報を提供する必要があります。
-
このうち、SDKAppIDはアプリケーションの識別に使用され、UserIDはユーザーの識別に使用されます。UserSigは、HMAC SHA256暗号化アルゴリズムによって計算される最初の2つに基づいて計算されるセキュリティ署名です。 攻撃者がUserSigを偽造できない限り、クラウドサービストラフィックを盗むことはできません。
-
UserSigの計算原理は次のとおりです。その本質は、SDKAppID、UserID、ExpireTimeなどのキー情報をハッシュおよび暗号化することです
//UserSigの求める方法。secretkeyはusersigを求めるための秘密鍵
usersig = hmacsha256(secretkey, (userid + sdkappid + currtime + expire +
base64(userid + sdkappid + currtime + expire)))
- 上記のから見ると、PKIのメカニズムと同じ仕組みです。
秘密鍵の取得
前提条件:テンセントクラウドでIMアプリを作成したこと。まだ作成していない場合、ここに参考すること。
- IMコンソールでにアクセスして、アプリの情報にクリックすると
UserSig署名の生成
- アプリでUserSig署名の直接生成
- サーバでUserSig署名の生成
アプリで直接生成
Javaの場合
userSig = GenTLSSignature(TCGlobalConfig.SDKAPPID, userId, TCGlobalConfig.EXPIRETIME, null, TCGlobalConfig.SECRETKEY);
MLVB/TRTC/IMのDEMOはユーザーを早くを体験するために、秘密鍵をアプリに保持して、直接生成しますが、実際アプリを実際運用する時にUserSig署名の生成の部分はサーバで行うのはおすすめです。なぜかというと、アプリをデコンパイルしてしまうと、第三者にプ秘密鍵が漏れてしまいます。
サーバで生成
UserSigのサーバー側の計算方法を使用すると、リバースアプリよりもサーバーを破壊することが難しいため、UserSigの計算に使用されるキーが漏洩しないようにすることができます。 具体的なアプローチは次のとおりです。
- アプリがSDKの初期化関数を呼び出す前に、まずサーバーからUserSigをリクエストする必要があります。
- サーバーはSDKAppIDとUserIDに基づいてUserSigを計算します。
pythonでUserSigを求める例:(他の言語の求める方法は最後のテーブルをご参考ください)
### pip install tls-sig-api-v2 でTLSSigAPIv2をインストールすること
import TLSSigAPIv2
### 秘密鍵:5bd2850fff3ecb11d7c805251c51ee463a25727bddc2385f3fa8bfee1bb93b5e
### SDKAppID:1400000000
### APIを取得
api = TLSSigAPIv2.TLSSigAPIv2(1400000000, '5bd2850fff3ecb11d7c805251c51ee463a25727bddc2385f3fa8bfee1bb93b5e')
### "秘密鍵で「こんにちは」を暗号化する。いわゆる電子書名を行う"
sig = api.gen_sig("こんにちは")
### 暗号化したものを出力(署名したもの)
print(sig)
- サーバーは、計算されたUserSigをアプリに返します。
- アプリが取得したUserSigは、特定のAPIを介してSDKに渡されます。
- SDKは、検証のためにSDKAppID + UserID + UserSigをTencent Cloud Serverに送信します。
- Tencent Cloudは、その合法性を確認するためにUserSigを検証します。
- 検証を通過すると、TRTC/MLVB/IM SDKはサービスを提供します。
他の言語でUserSigの求める方法
言語 | 署名の生成方法 | 関数 | リンク |
---|---|---|---|
Java | HMAC-SHA256 | genSig | Github |
GO | HMAC-SHA256 | GenSig | Github |
PHP | HMAC-SHA256 | genSig | Github |
Nodejs | HMAC-SHA256 | genSig | Github |
Python | HMAC-SHA256 | gen_sig | Github |
C# | HMAC-SHA256 | GenSig | Github |