超簡單整合華為系統完整性檢測,搞定裝置安全防護
在不安全裝置,如被root或解鎖的手機上,執行應用通常會伴隨著一定安全風險,例如被惡意病毒或木馬軟體利用root許可權植入病毒、篡改使用者裝置資訊和破壞系統等。因此,如何做好應用的安全防護、避免在不安全裝置環境中產生安全風險,已經成為其開發者必須要考慮的因素。對此,華為開放安全檢測服務,提供系統完整性檢測(SysIntegrity API),可檢測應用執行的裝置環境是否安全,如裝置是否被root、被解鎖等。
一、服務介紹
華為系統完整性檢測包括以下特點:
-
基於可信執行環境TEE提供系統完整性檢測結果:在裝置安全啟動時,在TEE中評估檢測系統完整性,可信度高,並動態評估系統完整性。
-
系統完整性檢測結果安全可信:系統完整性檢測結果經過數字證書籤名,檢測結果不可篡改。
其業務流程圖如下圖所示:
(1) 你的應用整合HMS Core SDK呼叫Safety Detect service。
(2) 請求TSMS(Trusted Security Management Service)伺服器簽名檢測結果Server。
(3) 你的應用請求自己服務檢測結果。
---- 結束
二、場景案例介紹
目前已有金融、娛樂、便捷生活、新聞閱讀等多個領域的App集成了華為系統完整性檢測:
金融類應用整合華為SysIntegrity,可有效提升交易安全性。例如,可以在使用者輸入信用卡安全碼(CVC)時,確認手機的系統環境是否安全。如手機裝置未通過系統完整性檢測驗證,則不允許使用該應用,以此保護交易安全:
生活、新聞閱讀類應用,整合SysIntegrity後可有效防止黑客攻擊,確保應用內付費等活動安全:
視訊娛樂類應用整合SysIntegrity,可以幫助保護內容版權;當用戶註冊、觀看和下載離線播放視屏時,可以確保使用者在內容提供商認可的裝置上,完成流媒體和視訊播放:
三、開發程式碼
1 在AppGallery Connect中配置相關資訊
在開發應用前,需要在AppGallery Connect中配置相關資訊。
具體操作步驟:https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides-V5/config-agc-0000001050416303-V5
2 配置HMS Core SDK的Maven倉地址
2.1 開啟Android Studio專案級“build.gradle"檔案
2.2 新增HUAWEI agcp外掛以及Maven程式碼庫
- 在allprojects-> repositories裡面配置HMS Core SDK的Maven倉地址。
1. allprojects {
2. repositories {
3. google()
4. jcenter()
5. maven {url 'https://developer.huawei.com/repo/'}
6. }
7. }
- 在buildscript->repositories裡面配置HMS Core SDK的Maven倉地址。
1. buildscript {
2. repositories {
3. google()
4. jcenter()
5. maven {url 'https://developer.huawei.com/repo/'}
6. }
7. }
- 在buildscript ->dependencies裡面增加配置。
1. buildscript{
2. dependencies {
3. classpath 'com.huawei.agconnect:agcp:1.3.1.300'
4. }
5. }
3 建立SafetyDetectClient 並生成nonce值
1. // 建立SafetyDetectClient
2. SafetyDetectClient mClient = SafetyDetect.getClient(MainActivity.this);
3. // 生成 nonce值
4. byte[] nonce = new byte[24];
5. try {
6. SecureRandom random;
7. if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
8. random = SecureRandom.getInstanceStrong();
9. } else {
10. random = SecureRandom.getInstance("SHA1PRNG");
11. }
12. random.nextBytes(nonce);
13. } catch (NoSuchAlgorithmException e) {
14. Log.e(TAG, e.getMessage());
15. }
4 建立檢測結果監聽
1. // 實現OnSuccessListener介面,並從 onSuccess獲取檢測結果
2. protected class SysIntegrityOnSuccessListener implements OnSuccessListener<SysIntegrityResp> {
3.
4. // 獲取系統完整性檢測結果
5. @Override
6. public void onSuccess(SysIntegrityResp sysIntegrityResp) {
7.
8. }
9.
10 }
11. // 實現OnFailureListener介面,並從 onFailure異常詳情
12. protected class SysIntegrityOnFailureListener implements OnFailureListener {
13. // 獲取異常錯誤碼已經異常詳情
14. @Override
15. public void onFailure(Exception e) {
16.
17. }
18. }
5 呼叫系統完整性檢測
1. // 呼叫系統完整性檢測介面,********傳入appid
2. Task task = mClient.sysIntegrity(nonce,"********");
3. task.addOnSuccessListener(new SysIntegrityOnSuccessListener()).addOnFailureListener(new SysIntegrityOnFailureListener());
6 結果驗證
伺服器中驗證系統完整性檢測結果可以參考開發者聯盟官網。
如果你對實現方式感興趣,可以參考Github原始碼連結:https://github.com/HMS-Core/hms-safetydetect-demo-android
更詳細的開發指南,請參考華為開發者聯盟官網:
獲取開發指導文件:
下載demo和示例程式碼請到Github:https://github.com/HMS-Core
解決整合問題請到Stack Overflow:
https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest
原文連結:
https://developer.huawei.com/consumer/cn/forum/topic/0201393882637910006?fid=18
作者:晚上吃啥