UserSig란 Tencent Cloud가 설계한 일종의 보안 서명으로, 악성 해커가 귀하의 클라우드 서비스 사용권을 도용하는 것을 방지합니다.
현재 Tencent Cloud의 TRTC, IM, MLVB 등의 서비스는 모두 이 보안 메커니즘을 사용하고 있으며, 이러한 서비스를 사용하려면 해당 SDK의 초기화 또는 로그인 함수에 SDKAppID, UserID, UserSig의 주요 정보를 제공해야 합니다.
이 중, SDKAppID는 귀하의 애플리케이션 식별에 사용되고, UserID는 귀사의 사용자 식별에 사용됩니다. UserSig는 이 둘을 기반으로 보안 서명을 계산합니다. UserSig는 HMAC SHA256 암호화 알고리즘으로 계산됩니다. 해커가 UserSig를 위조하지 못하는 이상 귀하의 클라우드 서비스 트래픽을 도용할 수 없습니다.
UserSig의 계산 원리는 다음 이미지와 같으며, 그 본질은 SDKAppID, UserID, ExpireTime 등 주요 정보에 대해 해시 암호화를 1회 진행하는 것입니다.
//UserSig 계산 공식, 여기서 secretkey는 usersig 계산용 암호화 키
usersig = hmacsha256(secretkey, (userid + sdkappid + currtime + expire +
base64(userid + sdkappid + currtime + expire)))
설명:
- 'currtime'은 현재 시스템 시간이고 'expire'는 서명 만료 시간입니다.
- 상기 그림은 UserSig를 계산하는 방법만을 보여줍니다. UserSig 연결 코드를 구현하는 방법에 대한 자세한 내용은 클라이언트 계산 UserSig 및 서버 계산 UserSig를 참고하십시오.
현재 Demo를 빠르게 실행하고 TRTC SDK의 기능에 대해 배우고 싶다면 클라이언트 샘플 코드 및 콘솔 메소드를 통해 UserSig를 계산하고 얻을 수 있습니다. 다음을 참고하십시오.
주의:
- UserSig를 얻기 위한 위의 두 가지 계산 방식은 디버깅에만 적용할 수 있습니다. 제품 런칭에는 이 방법을 권장하지 않습니다. 클라이언트 코드(특히 Web)의 SECRETKEY는 디컴파일로 크래킹되기 쉽습니다. 키가 유출되면 해커는 Tencent Cloud 트래픽을 도용할 수 있습니다.
- 올바른 방법은 프로젝트 서버에 UserSig 계산 코드를 배포하여 App이 필요할 때마다 실시간 계산된 UserSig를 서버에서 요청할 수 있도록 하는 것입니다.
SDKAPPID 및 키 가져오기:
UserSig 계산:
클라이언트 사용을 용이하게 하기 위해 각 플랫폼에서 UserSig를 계산하기 위한 소스 파일을 제공합니다. 계산을 직접 다운로드할 수 있습니다.
적용 플랫폼 | 파일 소스 코드 | 파일 상대 경로 |
---|---|---|
iOS | Github | TRTC-API-Example-OC/Debug/GenerateTestUserSig.h |
Mac | Github | OCDemo/TRTCDemo/TRTC/GenerateTestUserSig.h |
Android | Github | TRTC-API-Example/Debug/src/main/java/com/tencent/trtc/debug/GenerateTestUserSig.java |
Windows(C++) | Github | TRTC-API-Example-C++/TRTC-API-Example-Qt/src/Util/defs.h |
Windows(C#) | Github | TRTC-API-Example-CSharp/TRTC-API-Example-CSharp/GenerateTestUserSig.cs |
Web | Github | base-js/js/debug/GenerateTestUserSig.js |
Flutter | Github | TRTC-API-Example/lib/Debug/GenerateTestUserSig.dart |
TRTC SDK의 예시 코드에 GenerateTestUserSig
라는 오픈 소스 모듈을 제공하였습니다. 이 중 SDKAPPID, EXPIRETIME 및 SECRETKEY 등 3가지 멤버 변수를 자체 설정으로 변경하면 genTestUserSig()
함수를 호출하여 계산된 UserSig를 획득해 SDK 관련 기능을 빠르게 실행할 수 있습니다.
비즈니스의 공식 운영 단계에서 TRTC는 UserSig에 대한 상위 수준의 서버측 계산 솔루션을 제공하여 UserSig 계산용 키가 유출되는 것을 최대한 막을 수 있습니다. 이는 서버를 뚫는 것이 App을 리버스하는 것보다 어렵기 때문입니다. 구체적인 구현 프로세스는 다음과 같습니다.
SDKAppID + UserID + UserSig
를 Tencent Cloud 서버에 보내 인증을 진행합니다.과정을 간소화하기 위해 다국어 버전의 UserSig 계산 소스 코드(현재 버전 서명 알고리즘)를 제공합니다.
언어 버전 | 서명 알고리즘 | 핵심 함수 | 다운로드 링크 |
---|---|---|---|
Java | HMAC-SHA256 | genSig | Github |
GO | HMAC-SHA256 | GenSig | Github |
PHP | HMAC-SHA256 | genSig | Github |
Node.js | HMAC-SHA256 | genSig | Github |
Python | HMAC-SHA256 | genSig | Github |
C# | HMAC-SHA256 | GenSig | Github |
서명 계산 난이도를 낮추고 고객이 더욱 빠르게 Tencent Cloud 서비스를 이용할 수 있도록 하기 위해, TRTC는 2019-07-19부터 새로운 서명 알고리즘을 적용하여, ECDSA-SHA256을 HMAC-SHA256으로 업그레이드 하였습니다. 2019-07-19 이후 생성된 SDKAppID는 새로운 HMAC-SHA256 알고리즘이 적용됩니다.
SDKAppID가 2019-07-19 이전에 생성된 경우 기존 버전의 서명 알고리즘을 계속 사용할 수 있습니다. 알고리즘 소스 코드의 다운로드 링크는 다음과 같습니다.
언어 버전 | 서명 알고리즘 | 다운로드 링크 |
---|---|---|
Java | ECDSA-SHA256 | Github |
C++ | ECDSA-SHA256 | Github |
GO | ECDSA-SHA256 | Github |
PHP | ECDSA-SHA256 | Github |
Node.js | ECDSA-SHA256 | Github |
C# | ECDSA-SHA256 | Github |
Python | ECDSA-SHA256 | Github |
문제 해결에 도움이 되었나요?