crypto.randomUUID()与crypto的HTTPS / localhost限制

使用127.0.0.1或局域网IP直接访问的页面中,无法使用crypto.randomUUID()
其根本原因是crypto.randomUUID()调用了crypto.getRandomValues(array)来生成伪随机数,而crypto.getRandomValues有较高的安全要求,必须在 HTTPS / localhost 环境中才可使用。理由大致可以分为两个层面:

传输安全

在 HTTP 环境中:

  • 所有请求、响应都可能被中间人攻击篡改。
  • 即使页面用crypto.getRandomValues()生成了强随机数(比如做签名、HMAC、Token),攻击者也可以直接拦截或替换随机值,导致签名和校验完全失效。

例如:
你用随机数生成 Session Token → 传输在 HTTP 中 → 中间人看到并篡改 → Token 失去意义。
即使算法本身安全,不安全的传输让安全性归零

所以浏览器规定:
安全传输 (HTTPS/localhost) 才能调用 Web Crypto API,避免开发者在 HTTP 下产生“伪安全感”

操作系统底层随机数源

crypto.getRandomValues()不是在JavaScript环境计算得出结果的,而是调用操作系统的CSPRNG(Cryptographically Secure PseudoRandom Number Generator,密码学安全伪随机数生成器):

JS 调用 crypto.getRandomValues()

浏览器 JS 引擎 (V8 / SpiderMonkey / JavaScriptCore)

C++ 层封装 (Chromium: base::RandBytes)

操作系统 API (BCryptGenRandom / getrandom / SecRandomCopyBytes)

操作系统的 CSPRNG 熵池

这些底层熵池会收集硬件噪声、时间、系统事件,保证不可预测。
一旦随机数生成被劫持,被替换成伪随机数,会导致:

密钥可预测 → 加密失效
签名 k 重复 → 私钥泄露
Token / Session 可预测 → 身份伪造

而在HTTPS环境中,开发者可严格限制第三方JS脚本的加载,减少在JS层被Hook劫持的风险

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇