您认为每个会话都使用一组伪随机生成的密钥是正确的。如果网络设置为使用预共享密钥 (PSK),则流程如下:
- 连接设备使接入点 (AP) 知道自己。
- AP 向设备发送一个伪随机生成的随机数(作为明文)。
- 该设备生成自己的伪随机随机数。
- 然后,设备使用这两个随机数,即 AP 的 MAC 地址、设备的 MAC 地址和 PSK 作为加密散列函数的输入,创建一个称为成对时间密钥 (PTK) 的密钥信息块,它是长度为 64 字节或 512 位。
- 该 PTK 被分割以产生 5 个单独的会话密钥。密钥确认密钥 (KCK) 为 128 位长,密钥加密密钥 (KEK) 为 128 位,临时密钥 (TK) 为 128 位,两个较短的密钥 Rx 和 Tx 用于提供消息验证码 (MAC),两者均64 位长。
- 设备现在用它自己的 nonce 响应 AP,并与它收到的 AP 的 nonce 和 KCK 的哈希连接。
- AP 派生与设备相同的 PTK 和会话密钥,因为它现在拥有相同的输入信息(随机数、PSK、MAC 地址)。然后,它可以使用派生的 KCK 对自己的 nonce 进行哈希处理,并将其与收到的 KCK 进行检查。这确认设备共享 PSK,并且设备现在已通过 AP 身份验证。
- AP 使用 KCK 和序列号以设备的随机数哈希响应设备,以防止主动攻击者重播先前的消息。
- 设备根据预期结果(使用 KCK)检查其自己的 nonce 接收到的哈希,如果它们匹配,则 AP 对设备进行身份验证。
- 设备以接收确认响应,握手完成。
从此时起,AP 和设备之间的消息使用 AES 加密,并使用两个设备派生的 TK。Rx 用于为设备发送的消息创建 MAC,Tx 用于为 AP 发送的消息创建 MAC。
请注意,未提及 KEK 的使用。我不完全确定它的用途,但我认为它已添加到标准中以允许对身份验证握手进行特定于实现的扩展。
这个答案可能比您寻找的更具理论性,但我希望它有所帮助。