密码学系列之:memory-bound函数

简介

memory-bound函数可以称为内存受限函数,它是指完成给定计算问题的时间主要取决于保存工作数据所需的内存量。和之相对应的就是计算受限compute-bound的函数,在计算受限的函数中,计算所需要的计算步骤是其决定因素。

本文将会介绍一下内存受限函数和它跟内存函数的关系。

内存函数

内存函数和内存受限函数看名字好像很类似,其实他们的作用是不同的,我们先来看下内存函数。

在学习算法中,有一个非常简单好用的算法叫做递归算法,熟悉递归算法的朋友可能都知道,递归算法虽然好用,但是有个缺点就是会重复计算递归过程中的函数,比如说递归中最经典的斐波拉赫数列:

 Recursive_Fibonacci (n)
{
if (n == 0)
return 0
if (n == 1)
return 1 return Recursive_Fibonacci (n-1) + Recursive_Fibonacci (n-2)
}

很简单,但是我们来考虑下计算过程,F(3)=F(2)+F(1), 而F(4)=F(3)+F(2),在这个过程中需要计算2次F(2)的值。如果计算的N值够大的话,重复计算的值还会更多。

一个解决方法就是将之前计算过的结果使用内存存起来,这种方法就叫做内存函数:

 Fibonacci (n)
{
for i = 0 to n-1
results[i] = -1 // -1 means undefined return Fibonacci_Results (results, n);
} Fibonacci_Results (results, n)
{
if (results[n] != -1) // If it has been solved before,
return results[n] // look it up.
if (n == 0)
val = 0
else if (n == 1)
val = 1
else
val = Fibonacci_Results(results, n-2 ) + Fibonacci_Results(results, n-1)
results[n] = val // Save this result for re-use. return val
}

虽然直接递归的逻辑很简单,写起来也很方便,但是它的时间复杂度会更高。

内存受限函数

内存受限函数主要用来描述一个使用XOR的函数,它由一系列计算组成,其中每一次计算都依赖于前一次计算。

因为这样的内存依赖关系,所以内存受限函数主要用在密码学中,可以防止密码的暴力破解工作。

下面举个内存受限函数在防止垃圾邮件中的使用。

内存受限函数的使用

使用内存受限函数来防止垃圾邮件,主要使用的是POW的原理,也就是说,你可以给我发垃圾邮件,但是前提是需要付出一些代价。

当然,最初的防垃圾邮件的原理是使用CPU受限函数。

1992年,IBM的研究科学家Cynthia Dwork和Moni Naor在CRYPTO上发表了一篇题为《通过定价来阻止垃圾邮件》的论文,他们提出了一种利用CPU受限函数的功能来阻止滥用者发送垃圾邮件的可能性。

该方案的原理是:如果滥发邮件的成本很低,那么垃圾邮件就可能横行。如果能够通过以昂贵的CPU计算的形式为发送邮件添加额外的计算成本,就可以减少垃圾邮件。使用CPU受限函数,使得每发一次邮件都需要消耗一定的CPU资源,从而防止在短时间内发送大量的垃圾邮件。

CPU受限函数是一种突破,但是也有其缺点。

因为快CPU的计算速度比慢CPU快得多。此外,高端计算机系统也有复杂的流水线和其他有利于计算的优化功能。因此,拥有高端系统的垃圾邮件发送者几乎不会受到这种CPU受限函数的影响。

从而会因为不同用户机器性能的不同,导致非常大的计算时间差异。比如如果一个算法在高级计算机上需要几秒钟,那么在老的计算机上可能需要1分钟,而在性能更差点的手机上可能会需要几分钟,那么这个算法肯定是无法被手机用户接受的。

因此,研究者们关注的是如何找到一种在大多数计算机系统都以大致相同的速度运行的函数,虽然在高级计算机上速度会更快,但也只是稍微快一点而已,不是几何级数的快,那么就可以在容忍范围之内。

这种方法就是使用内存受限函数。内存受限函数是指计算时间由访问内存的时间支配的函数。内存受限函数以一种不可预测的方式访问大内存区域的位置,从而无法使用缓存来提升性能。

使用内存受限而不是CPU受限也有其工业上的原因,近年来,虽然CPU的计算速度急剧增长,但在开发更快的主内存方面进展相对较小。所以可以预见,在未来的一定时间内,内存受限函数还会有越来越多的应用场景。

本文已收录于 http://www.flydean.com/memory-bound/

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

密码学系列之:memory-bound函数的更多相关文章

  1. 密码学系列之:memory-hard函数

    密码学系列之:memory-hard函数 目录 简介 为什么需要MHF Memory hard的评估方法 MHF的种类 MHF的密码学意义 memory-hard在MHF中的应用 简介 Memory ...

  2. shell编程系列6--shell中的函数

    shell编程系列6--shell中的函数 .函数介绍 linux shell中的函数和大多数编程语言中的函数一样 将相似的任务或者代码封装到函数中,供其他地方调用 语法格式 第一种格式 name() ...

  3. 密码学系列之:碰撞抵御和碰撞攻击collision attack

    密码学系列之:碰撞抵御和碰撞攻击collision attack 简介 hash是密码学和平时的程序中经常会用到的一个功能,如果hash算法设计的不好,会产生hash碰撞,甚至产生碰撞攻击. 今天和大 ...

  4. 密码学系列之:feistel cipher

    密码学系列之:feistel cipher 简介 feistel cipher也叫做Luby–Rackoff分组密码,是用来构建分组加密算法的对称结构.它是由德籍密码学家Horst Feistel在I ...

  5. 密码学系列之:Argon2加密算法详解

    目录 简介 密钥推导函数key derivation function Password Hashing Competition Argon2算法 Argon2的输入参数 处理流程 简介 Argon2 ...

  6. 进程间通信系列 之 消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

  7. 智能合约语言 Solidity 教程系列10 - 完全理解函数修改器

    这是Solidity教程系列文章第10篇,带大家完全理解Solidity的函数修改器. Solidity系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编 ...

  8. 密码学系列之:Merkle–Damgård结构和长度延展攻击

    密码学系列之:Merkle–Damgård结构和长度延展攻击 简介 Merkle–Damgård结构简称为MD结构,主要用在hash算法中抵御碰撞攻击.这个结构是一些优秀的hash算法,比如MD5,S ...

  9. 密码学系列之:海绵函数sponge function

    目录 简介 海绵函数的结构 海绵函数的应用 简介 海绵函数sponge function是密码学中使用的一种函数,它接收一定长度的输入,然后输出一定长度的输出,中间包含了有限个内部状态. 因为海绵函数 ...

随机推荐

  1. 记一次 .NET 某三甲医院HIS系统 内存暴涨分析

    一:背景 1. 讲故事 前几天有位朋友加wx说他的程序遭遇了内存暴涨,求助如何分析? 和这位朋友聊下来,这个dump也是取自一个HIS系统,如朋友所说我这真的是和医院杠上了,这样也好,给自己攒点资源, ...

  2. 【SpringBoot基础系列】手把手实现国际化支持实例开发

    [SpringBoot基础系列]手把手实现国际化支持实例开发 国际化的支持,对于app开发的小伙伴来说应该比价常见了:作为java后端的小伙伴,一般来讲接触国际化的机会不太多,毕竟业务开展到海外的企业 ...

  3. 上传靶机实战之upload-labs解题

    前言 我们知道对靶机的渗透可以提高自己对知识的掌握能力,这篇文章就对上传靶机upload-labs做一个全面的思路分析,一共21个关卡.让我们开始吧,之前也写过关于上传的专题,分别为浅谈文件上传漏洞( ...

  4. harbor搭建及使用

    harbor搭建及使用   1 系统及软件版本 1.1 系统版本 # uname -a Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP ...

  5. Go语言流程控制06--猜数字游戏

    package main import ( "fmt" "math/rand" "time" ) /* ·随机生成一个三位数 ·让用户输入其 ...

  6. ST为飞行时间传感器增加了多目标测距

    ST为飞行时间传感器增加了多目标测距 ST adds multi-object ranging to time-of-flight sensors STMicroelectronics已经扩展了其Fl ...

  7. 九、部署audit监控文件

    审计的目的是基于事先配置的规则生成日志,记录可能发生在系统上的事件(正常或非正常行为的事件),审计不会为系统提供额外的安全保护,但她会发现并记录违反安全策略的人及其对应的行为. 审计能够记录的日志内容 ...

  8. (3)虚拟Web主机

    虚拟Web主机 作用:让一台Web服务器,提供多个页面 搭建方式: 1.基于域名的虚拟Web 2.基于端口的虚拟Web 3.基于IP地址的虚拟Web ######################### ...

  9. 【VBA】延时函数

    延时函数(单位秒),例如延时0.5秒 1 Sub 延时() 2 delay (0.5) 3 Debug.Print "延时0.5秒" 4 End Sub 5 6 Sub delay ...

  10. npm install 动不动卡住咋办?

    Hello 我是大粽子 孩子静消消,必定在作妖.我这三天静消消,也是在憋大招. 提前预告下,最近和视频号的文档正在较劲,剩下的功能大家猜猜.暂时没有留言功能,可以私信回复,猜对的下次购买时提我大名10 ...