首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MPPE-从MS-CHAPv2 2发送和接收密钥派生

MPPE-从MS-CHAPv2 2发送和接收密钥派生
EN

Security用户
提问于 2013-05-10 07:17:12
回答 1查看 2.5K关注 0票数 13

我正在尝试从MS 2挑战材料中获取MS-MPPE-发送密钥和MS-MPPE-Recv-键。我能够按照RFCs、二五四八三零七八三零七九年的步骤得到GetNewKeyFromSHA() --它是16字节长的。

三零七九年中,我可以使用密钥加密数据作为示例。问题是,我不确定应该如何获得RFC 二五四八中使用的会话密钥,以便从其中获取MPPE Send和MPPE键字段。

我有一个freeradius的例子,会话键在构建RFC 二五四八中所述的字符串之前从16字节转换为32字节。

我曾尝试用RC4加密GetNewKeyFromSHA()后的会话密钥,但它对我不起作用。如果有人能详细解释一下这个中间的步骤,那就太好了!

编辑1

我还尝试过两次在二五四八中进行加密,但仍然没有结果,我现在正在深入研究freeRADIUS源代码,但是在从MS 2材料中获得主密钥之后,很难理解。有什么想法吗?

编辑2

从freeradius的角度来看,它首先从MS-CHAv2材料中导出密钥,然后使用主秘密和TLS握手中的随机数来生成32字节发送和接收密钥,而不是加密发送。这正如RFC 二七一六所说,然后将它们加密为RFC 二五四八,最后将它们发送出去。

那么,是否可以像在RFC 三零七九年中那样使用从MS 2材料中派生的主密钥?或者唯一的办法就是像自由女神那样?

EN

回答 1

Security用户

发布于 2015-08-19 15:32:09

不确定您的问题,这些值是如何加密的吗?它在RFC-2548节2.4.2中进行了描述。

我认为这是因为在你的问题中你说:

我有一个freeradius的例子,会话键在构建RFC 2548中所述的字符串之前,从16字节转换为32字节。

因此,您想知道如何从16字节键到RADIUS属性中使用的32字节值?

基本上,32字节的密钥是16字节键的2个MD5散列.由于这个原因,该值必须是16的倍数。您拥有32而不是16的原因是,您将一个单字节值16 (用于键长)添加到键值上,从而使长度为17,从而将其推入第二个16字节窗口。剩下的15个字节应该是0块.

因此,无论如何,您正在使用RADIUS共享秘密、来自原始RADIUS请求的16字节请求身份验证器和一个随机的2字节盐值来加密您现在的17字节密钥值。

随机的盐值可以是任何东西。正如您已经注意到的,freeradius是从一个TLS函数中派生出来的,但这只适用于您在TLS上隧道化的情况。你可以把什么东西从空气中拉出来。

然后,将两个字节的盐值加到32字节的加密值上,生成一个34字节的值,您就完成了!

Construct a plaintext version of the String field by concate- nating the Key-Length and Key sub-fields. If necessary, pad the resulting string until its length (in octets) is an even multiple of 16. It is recommended that zero octets (0x00) be used for padding. Call this plaintext P. Call the shared secret S, the pseudo-random 128-bit Request Authenticator (from the corresponding Access-Request packet) R, and the contents of the Salt field A. Break P into 16 octet chunks p(1), p(2)...p(i), where i = len(P)/16. Call the ciphertext blocks c(1), c(2)...c(i) and the final ciphertext C. Intermediate values b(1), b(2)...c(i) are required. Encryption is performed in the following manner ('+' indicates concatenation): b(1) = MD5(S + R + A) c(1) = p(1) xor b(1) C = c(1) b(2) = MD5(S + c(1)) c(2) = p(2) xor b(2) C = C + c(2) . . . . . . b(i) = MD5(S + c(i-1)) c(i) = p(i) xor b(i) C = C + c(i) The resulting encrypted String field will contain c(1)+c(2)+...+c(i).

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/35683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档