nonce值是什么?(Number once)(Number used once)cnonce(client nonce)(一个只被使用一次的任意或非重复的随机数值)
Nonce是Number once的缩写,在密码学中Nonce是一个只被使用一次的任意或非重复的随机数值。
具体应用
在摘要认证中服务器让客户选一个随机数(称作”nonce“),然后浏览器使用一个单向的加密函数生成一个消息摘要(message digest),该摘要是关于用户名、密码、给定的nonce值、HTTP方法,以及所请求的URL。
例子编辑 播报
一个典型的基于 nonce 的验证协议如下:
这里的 cnonce 为 client nonce(后面将讨论为什么需要 cnonce)。Client 并不直接发送密码(或者密码直接加密后的密文)用以避免攻击者直接窃取密码(或者密码直接加密后的密文)并冒充用户进行身份验证。
先不考虑 Client nonce。Server 首先发送 nonce 到 Client,Client 将密码和 nonce 通过 hash 运算再提交到 Server 进行身份验证,这样我们可以认为(而非绝对)每次用于身份验证的 hash 值都不相同,即使攻击者窃取了前一次用于身份验证的 hash 值也无法冒充用户进行登录。公式如下:
A = Hash(nonce, password);
在不安全的网络环境中,A、nonce、Hash 算法都可以被攻击者获取,如果能够满足以下条件:
- nonce 仅仅被使用一次,
- Hash 运算不出现冲突。
攻击者则在理论上无法实施 Replay attack。 因此 nonce 在特定上下文中仅仅被使用一次以及 Hash 算法尽量避免冲突是安全的关键。为了确保 nonce 在特定上下文中仅仅被使用一次,可以使用以下策略生成 nonce:
- nonce 可以是一个时间相关变量,
- nonce 可以是一个通过足够随机算法生成的足够长的 bits。
以上算法难以避免攻击者使用字典进行密码破解。其中一个可行的方法为:攻击者可以截取A = Hash(nonce, password) 中的 A、nonce,然后通过字典破解用户的密码 password。不过破解的过程是很耗时的,使用一个中等规模的集群(medium-scale cluster)可能需要数周),如果期望破解成千上万用户的密码,那么将消耗极大量的时间。
如果攻击者能够构建一个预计算的表(例如Rainbow tables)那么破解大量用户密码的时间将大大缩短。nonce 阻止了预计算表的生成(因为 Server nonce 每次都不相同),但是如果网络中传输的数据能被篡改,情况就不一样了。假定攻击者伪造一个固定的 nonce 发送给网络中的 Clients 并且记录 nonce 和 Clients 的回应(Hash(nonce, password)),由于 nonce 为一个固定值,那么攻击者就可以构造一个预计算的表,此表使用此固定的 nonce。通过此表即可大大缩短破解用户密码的时间了。
为了避免攻击者通过以上手段构建预计算的表。在 Client 也引入了一个 nonce。这样,每次都不同的 cnonce 防止了预计算表的生成。
参考文章:Nonce
有一些细节部分还是不太懂。。。回头有时间再研究。。。。
nonce值是什么?(Number once)(Number used once)cnonce(client nonce)(一个只被使用一次的任意或非重复的随机数值)相关推荐
- 通过修改mateMask的nonce值修复replacement transaction underpriced的问题
今天通过mateMask转账遇到了如下报错 [ethjs-query] while formatting outputs from RPC '{"value":{"cod ...
- pandas使用nunique函数计算dataframe每个数据列的独特值的个数(count number of unique values in each column of dataframe)
pandas使用nunique函数计算dataframe每个数据列的独特值的个数(count number of unique values in each column of dataframe) ...
- Number.parseInt(), Number.parseFloat()
Number.parseInt(), Number.parseFloat() ES6 将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变. // E ...
- oracle number +1,number number(1)
测试如下: create table test123 (a number,b number(1)) insert into test123 values (1,1) insert into test1 ...
- 263.Ugly Number||202 happy number||476 Number Complement||136 Single Number
263.Ugly Number 判断因数是否只有素数2.3.5.. 感觉比较简单: class Solution(object):def isUgly(self, num):""& ...
- Number、Number()和new Number()
今天周测出现了一道题是判断数据的数据类型,一开始的时候没有往深处想,就想到了表面,主要是没有把Number.Number()和new Number()理解透.在网上找了几篇关于这个的文章,刚开始晕晕的 ...
- 【PyTorch】torch.clamp()==>将input的值限制在[min, max]之间,并返回结果到一个新张量
函数定义: torch.clamp(input, min, max, out=None) 作用:限幅.将input的值限制在[min, max]之间,并返回结果到一个新张量 参数: input (Te ...
- [JS]请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组。
请给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组. 刚开始复习js题还不太习惯 CSDN上看了一个帖子,说是牛客上的标答, ...
- pandas使用groupby.last函数获取每个组中的最后一个值实战:groupby.last函数获取每个组中的最后一个值、groupby.nth函数获取每个组中的最后一个值
pandas使用groupby.last函数获取每个组中的最后一个值实战:groupby.last函数获取每个组中的最后一个值.groupby.nth函数获取每个组中的最后一个值 目录
最新文章
- XWiki 4.3 正式版发布
- 【译】理解Javascript函数执行—调用栈、事件循环、任务等
- 英文谚语:Take that with a grain of salt
- 一个简单RPC框架是怎样炼成的(II)——制定RPC消息
- Promise.race 的原理
- 在学习Python基础中需要知道的知识点:运算符大全,收藏,以后方面查询(算术运算符、赋值运算符、比较运算符、位运算符、逻辑运算符、成员运算符、身份运算符、运算符优先级))
- 【已解决】tomcat报严重: Socket accept failed
- 命令界面:使用Java中的动态API处理Redis
- 我是如何把30000行代码重构成15行
- 【AD18】原理图生成PDF
- PX4Flow使用操作
- 工业机器人电柜布线_工业机器人示教器及其连线图
- Vue项目搭建常用的配置文件,request.js和vue.config.js
- 导弹发射各项参数计算涉及计算机应用,按计算机用途分类
- Android Snackbar控件
- 将tif文件转换成mrc文件
- 微信小程序API 文件·文件管理器
- 计算机联锁验证实训报告心得,计算机实训心得体会(通用5篇)
- linux格式化分区4t硬盘,Linux下挂载4T大小usb硬盘的经历
- 使用 IndexedDB 进行大数据存储
热门文章
- 模拟喷泉码(入门二):Seamless Rate Adaptation for Wireless Networking
- Python学习笔记(1)---B站黑马程序员
- 前端入门 1| HTML基本结构
- 小白也能看懂的零信任SDP介绍
- [Perl]如何取绝对路径:FindBin模块和Cwd模块用法和区别
- PowerDesigner如何导出表到word的方法
- Windows 下 android自动打包 volley项目
- 友盟对android的应用,Android 集成友盟统计
- 实验一 常用仪器与门逻辑电路实验
- 在ReactJS中正确修改状态数组