Help us understand the problem. What is going on with this article?

テンセントクラウドの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のメカニズムと同じ仕組みです。

image.png

秘密鍵の取得

前提条件:テンセントクラウドでIMアプリを作成したこと。まだ作成していない場合、ここに参考すること。

  • IMコンソールでにアクセスして、アプリの情報にクリックすると

image.png

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はサービスを提供します。

image.png

他の言語で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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away