【笔记-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显卡的机台中,该软件随显卡驱动一并安装。
发布了114 篇原创文章 · 获赞 27 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/menghaocheng/article/details/104392969
今日推荐