【筆記-moonlight】客戶端與服務器的配對過程

配對

相關問題:

  • 客戶端是如何確定配對的狀態的?
  • 配對流程是怎樣的?
  • 解除配對的流程是怎樣的?
  • 雲手柄方案中如果去掉手柄端的配對過程應該怎麼做?

客戶端是如何獲取服務器信息的?

  • 客戶端會先嚐試通過https向服務器請求serverinfo信息,如果不成功則換用https再次請求serverinfo
    (GFE版本不允許在客戶端尚未配對的情況下通過HTTPS獲取serverinfo。因爲我們不能在不知道服務器版本的情況下進行配對,所以如果HTTPS請求失敗,我們將通過HTTP發出另一個請求。我們不能只使用HTTP,因爲它不能準確地告訴我們是否配對)
  • 請求參數:
    a)unique_id: 配對標識,重複使用同一個
    b)uuid:請求標識,每次不一樣
  • 在響應報文中的“PairStatus”字段標識是否已配對
  • https的端口號是47984,http的端口是47989

配對流程是怎樣的?

  • 生成4位的隨機pin碼–口令
  • 生成16位salt_pin並追加pin碼–得到
  • 計算salt_pin的哈希值
  • 生成密鑰對、證書
  • 準備好unique_id,生成uuid,生成加密隨機數salt_data
  • 將證書、salt_dat通過http發給服務器
  • 服務器收到後將回復服務端的plaincert
  • 將salt_data追加pin碼得到salt_pin
  • 計算salt_pin的哈希值aes_key_hash
  • 客戶端和服務端都根據aes_key_hash獲得加密密鑰和解密密鑰
  • 生成一個隨機數並用加密密鑰加密得到challenge_hex併發給發到服務端,其目的是測試服務端能否解密
  • 響應報文中包含兩個信息:a)服務端有沒有解密成功,b)一段密文:challengeresponse,其目的是測試讓客戶端解密
  • 客戶端用解密密鑰將challengeresponse解密得到challenge_response
  • 然後把challenge_response追加X.509簽名和一段新的隨機數種子,然後加密後發給服務端
  • (推測:服務端收到後將檢查客戶端解密的challenge_response是否正確,如果正確將檢驗證書並接受新的隨機數種子)
  • 服務端返回已接受
  • 客戶端向服務器請求切換證書(即使用新的隨機數種子)
  • 服務端回覆:同意
    (配對完成)

解除配對的流程是怎樣的?

  • 客戶端向服務端發起unpair請求,關鍵參數是unique_id
  • (unique_id跟配對時所帶的unique_id一致)

雲手柄方案中如果去掉手柄端的配對過程應該怎麼做?

  • 先在android端完成配對,手柄端永遠不做配對流程
  • 手柄連上android後主動查詢配對狀態,並獲取android端的密鑰、證書、unigque_id傳到手柄
  • 串流時先啓動Android端流程,再啓動手柄端流程

串流

相關問題:

  • 串流包括哪些通道?
  • 每個通道是幹什麼用的?

加密相關知識

  • X.509證書
  • PKCS12證書
  • 證書文件通常以.cer, .crt結尾
  • 公鑰文件通常以.pem結尾
  • 私鑰文件通常以.key結尾
  • .pfx 一種文件存儲格式, pkcs12是它的實現, 通常裏面同時包含私鑰, 公鑰, 證書, 方便存儲和傳播

typedef struct _CERT_KEY_PAIR {
X509 *x509; //證書
EVP_PKEY *pkey; //密鑰對
PKCS12 *p12; //打包好的證書
} CERT_KEY_PAIR

Note

  • GFE:Nvidia Geforce Experience(以下簡稱GFE)是一款專爲遊戲玩家設計的軟件,它可以幫助Nvidia顯卡用戶快速升級驅動、優化遊戲設置、截取遊戲畫面。在出貨搭載Nvidia顯卡的機臺中,該軟件隨顯卡驅動一併安裝。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章