テンセントクラウドのUserSig署名の生成について


Tencent Cloudのご紹介

  • Tencent CloudにはIaaS、Paas、SaaSに別れて、プロダクト数は200以上
  • アカウントは下記2種類

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