V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
baitouwei
V2EX  ›  问与答

TSL 中,生成会话密钥的时候需要三个随机数,其中第一个随机数的作用是什么?

  •  
  •   baitouwei · 2015-02-27 18:39:07 +08:00 · 2422 次点击
    这是一个创建于 3359 天前的主题,其中的信息可能已经有所发展或是发生改变。

    阮一峰的那篇博文看了,但是感觉第一个随机数没什么作用。

    第 1 条附言  ·  2015-02-28 17:02:04 +08:00
    一共有三个随机数,Client.random,Server.random 和 permaster。其中 Client.random 和 permaster 都是客户端生成的,所以由于[同一台机器生成的随机数随机度不大],二取一就可以了,由因为 permaster 是用 Server 的公钥加密过的,所以就取 Server.random 和 permaster 俩个随机数就可以了(取 Client.random,Server.random 的话由于两个都是明文的肯定不行)
    6 条回复    2015-02-28 22:31:50 +08:00
    yfdyh000
        1
    yfdyh000  
       2015-02-27 18:57:33 +08:00
    因为在RSA时需要?不太确定,只是猜测。
    https://tools.ietf.org/html/rfc5246#page-52 的 case dhe_rsa:
    ryd994
        2
    ryd994  
       2015-02-27 22:16:09 +08:00 via Android   ❤️ 1
    为了避免有意无意中服务器生成的随机数随机度不够
    你看文章不认真啊:
    “一个伪随机可能完全不随机,可是是三个伪随机就十分接近随机了,每增加一个自由度,随机性增加的可不是一”
    baitouwei
        3
    baitouwei  
    OP
       2015-02-28 10:07:24 +08:00
    @ryd994 这段话我有读过。不过还是不太理解,如果第一个随机数只是为了添加一个自由度使得随机度更高,那为什么不用4个随机数呢?按文中的说法,一台机器的伪随机有被猜测出来的可能性,所以Client 端 和 Server端 都要生成伪随机数以提高随机度,这样不就是两个随机数就可以了?
    ryd994
        4
    ryd994  
       2015-02-28 11:46:20 +08:00
    @baitouwei 同一台电脑,不论有意无意,出来的随机度是不会有大改变的。
    所以用两个和用四个,如果双方实现正确,没有本质上的区别。
    至于第三个,我查了一下,说是仅对RSA用,用于加密客户端的私钥,其他有些算法是不一定需要的。
    根据RFC,如果客户端生成的premaster(也就是第三个)有问题,也不应出错,而是直接由服务器自己生成。我的理解是,其他算法可以用之前的两个随机数推出premaster,然后直接计算master。而RSA需要由某一方指定一个。
    http://tools.ietf.org/html/rfc5246#section-7.4.7.1

    当然,在master的计算中,所有的随机数都会参与:
    http://tools.ietf.org/html/rfc5246#section-8.1
    baitouwei
        5
    baitouwei  
    OP
       2015-02-28 17:03:31 +08:00
    @ryd994 一共有三个随机数,Client.random,Server.random 和 permaster。其中 Client.random 和 permaster 都是客户端生成的,所以由于[同一台机器生成的随机数随机度不大],二取一就可以了,由因为 permaster 是用 Server 的公钥加密过的,所以就取 Server.random 和 permaster 俩个随机数就可以了(取 Client.random,Server.random 的话由于两个都是明文的肯定不行)
    这样我就搞不懂 Client.random 有什么作用了。
    ryd994
        6
    ryd994  
       2015-02-28 22:31:50 +08:00
    @baitouwei Client.random,Server.random这两个都是必要的,对所有算法而言。premaster仅RSA需要发送,其他算法可直接推导。两个都是明文不是问题,又不是没有私钥。随机因子只是为了避免每次使用完全静态的私钥,保护私钥免于被逆向推出而已。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1241 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:12 · PVG 02:12 · LAX 11:12 · JFK 14:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.