PKC指的什么?
公开金钥加密(英语:Public-key cryptography,也称为??非对称(密钥)加密),该思想最早由雷夫·莫寇(Ralph C. Merkle)在1974年提出[1],之后在1976年。
狄菲(Whitfield Diffie)与赫尔曼(Martin Hellman)两位学者以单向函数与单向暗门函数为基础,为发讯与收讯的两方建立金钥。
是指一对加密密钥与解密密钥,这两个密钥是数学相关,用某用户加密密钥加密后所得的信息,只能用该用户的解密密钥才能解密。
如果知道了其中一个,并不能计算出另外一个。
因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。
称公开的密钥为公钥
上海美库尔(Merkle)怎样, 有发展前途吗? 和普华永道信息技术(BI方向的)相比哪个好啊?
你好,你想要找类似于技术的工作是吧,看起来这两个公司都不错啊,不过,普华永道更知名一些是吧,或者你还可以登录大上海人才网上看看有没有更好的选择。
祝你好运。
Dynamo的简介
按分布式系统常用的哈希算法切分数据,分放在不同的node上。
Read操作时,也是根据key的哈希值寻找对应的node。
Dynamo使用了Consistent Hashing算法,node对应的不再是一个确定的hash值,而是一个hash值范围,key的hash值落在这个范围内,则顺时针沿ring找,碰到的第一个node即为所需。
Dynamo对Consistent Hashing算法的改进在于:它放在环上作为一个node的是一组机器(而不是memcached把一台机器作为node),这一组机器是通过同步机制保证数据一致的。
以上图为例,node1其实包含了多台机器,在一个node里宕了一台机或增加一台机,并不影响整个Dynamo对key的寻找。
如果一个ring内的访问量大了,则可以在两个node间加入一个新node以缓解压力,这时会影响到其后继node的hash范围,需要调整数据。
假设一个ring中原本只有node2、node3、node4,在加入新的node1之后,原先从node2查询的部分key将改为从node1查询,node1和node2中的数据就需要调整,主要是node1从node2中提取出属于它的数据,这样做需要选取性能压力不高的时候。
Dynamo的一个node中的同步是由client端来“解决”的,使用所谓的(N, R, W)模型,其中,N表示node中机器的总数,R表示一个读请求需要的机器参与总数,W代表一个写请求需要的机器参与总数,这些值由client端配置。
例如,一个node有5台机器(N=5),client发出写请求——广播到5台机,如果收到3个“写完成”的返回消息,即认为写成功(W=3);client发出读请求——还是广播到5台机,如果收到2个“读完成”的返回消息,即认为读成功(R=2)。
对于数据十分重要的应用(如金融),配置可以为(5, 5, 5),即要求node中所有机器的写都成功;而对于数据读写访问量极高的应用,配置可以为(5, 1, 1)。
通常W不等于N,于是,在某些情况下一个node内的机器上的数据可能会有不一致,这时Dynamo是通过将多个Read的返回结果“合并”来得出最终结果的,使用了所谓Object Version和Vector clock的技术,即跟踪一个Object在不同机器上的版本变化,以确保当多个Read请求结果返回不一致时,能够根据其版本信息得出正确的结果。
Dynamo的这种做法是一种折衷,即为了同时保证读和写的效率,写操作不要求绝对同步,而把不同步可能产生的后果推给了读操作。
Dynamo的一个node中一台机器建有一个Merkle Tree,当两台机器不一致时(如一台机器宕机一段时间),通过这个tree结构,可以快速定位不一致的Object来恢复数据。
Merkle Tree又叫Hash Tree,它把key分成几个range,每个range算出一个hash值,作为叶子,再一层层合并计算上去,这样,从root开始比较hash值,就可以快速找到哪几段range中的hash值变化了。
md5 是什么文件?用什么文件打开?
就是一种加密算发,用文本查看文件一般就可以打开。
我还用过一个windows下的md5生成软件,也可以查看,叫WinMD5。
md5的全称是message-digest algorithm 5(信息-摘要算法),在90年代初由mit laboratory puter science和rsa data security inc的ronald l. rivest开发出来,经md2、md3和md4发展而来。
它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。
不管是md2、md4还是md5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。
虽然这些算法的结构或多或少有些相似,但md2的设计与md4和md5完全不同,那是因为md2是为8位机器做过设计优化的,而md4和md5却是面向32位的电脑。
这三个算法的描述和c语言源代码在 rfcs 1321中有详细的描述(h++p:///rfc/rfc1321.txt),这是一份最权威的文档,由ronald l. rivest在1992年8月向ieft提交。
rivest在1989年开发出md2算法。
在这个算法中,首先对信息进行数据补位,使信息的字节长度是16的倍数。
然后,以一个16位的检验和追加到信息末尾。
并且根据这个新产生的信息计算出散列值。
后来,rogier和chauvaud发现如果忽略了检验和将产生md2冲突。
md2算法的加密后结果是唯一的--既没有重复。
为了加强算法的安全性,rivest在1990年又开发出md4算法。
md4算法同样需要填补信息以确保信息的字节长度加上448后能被512整除(信息字节长度mod 512 = 448)。
然后,一个以64位二进制表示的信息的最初长度被添加进来。
信息被处理成512位damg?rd/merkle迭代结构的区块,而且每个区块要通过三个不同步骤的处理。
den boer和bosselaers以及其他人很快的发现了攻击md4版本中第一步和第三步的漏洞。
dobbertin向大家演示了如何利用一部普通的个人电脑在几分钟内找到md4完整版本中的冲突(这个冲突实际上是一种漏洞,它将导致对不同的内容进行加密却可能得到相同的加密后结果)。
毫无疑问,md4就此被淘汰掉了。
尽管md4算法在安全上有个这么大的漏洞,但它对在其后才被开发出来的好几种信息安全加密算法的出现却有着不可忽视的引导作用。
除了md5以外,其中比较有名的还有sha-1、ripe-md以及haval等。
一年以后,即1991年,rivest开发出技术上更为趋近成熟的md5算法。
它在md4的基础上增加了"安全-带子"(safety-belts)的概念。
虽然md5比md4稍微慢一些,但却更为安全。
这个算法很明显的由四个和md4设计有少许不同的步骤组成。
在md5算法中,信息-摘要的大小和填充的必要条件与md4完全相同。
den boer和bosselaers曾发现md5算法中的假冲突(pseudo-collisions),但除此之外就没有其他被发现的加密后结果了。
van oorschot和wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-force hash function),而且他们猜测一个被设计专门用来搜索md5冲突的机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个冲突。
但单从1991年到2001年这10年间,竟没有出现替代md5算法的md6或被叫做其他什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响md5的安全性。
上面所有这些都不足以成为md5的在实际应用中的问题。
并且,由于md5算法的使用不需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。
但即便是应用在绝密领域内,md5也不失为一种非常优秀的中间技术),md5怎么都应该算得上是非常安全的了。
算法的应用
md5的典型应用是对一段信息(message)产生信息摘要(message-digest),以防止被篡改。
比如,在unix下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:
md5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461
这就是tanajiya.tar.gz文件的数字签名。
md5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的md5信息摘要。
如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算md5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。
如果再有一个第三方的认证机构,用md5还可以防止文件作者的"抵赖",这就是所谓的数字签名应用。
md5还广泛用于加密和解密技术上。
比如在unix系统中用户的密码就是以md5(或其它类似的算法)经加密后存储在文件系统中。
当用户登录的时候,系统把用户输入的密码计算成md5值,然后再去和保存在文件系统中的md5值进行比较,进而确定输入的密码是否正确。
通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。
这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。
正是因为这个原因,现在被黑客使用最多的一种破译密码的方法就是一种被称为"跑字典"的方法。
有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用md5程序计算出这些字典项的md5值,然后再用目标的md5值在这个字典中检索。
我们假设密码的最大长度为8位字节(8 bytes),同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是p(62,1)+p(62,2)….+p(62,8),那也已经是一个很天文的数字了,存储这个字典就需要tb级的磁盘阵列,而且这种方法还有一个前提,就是能获得目标账户的密码md5值的情况下才可以。
这种加密技术被广泛的应用于unix系统中,这也是为什么unix系统比一般操作系统更为坚固一个重要原因。
算法描述
对md5算法简要的叙述可以为:md5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。