博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
密码学基础(二)算法和密钥
阅读量:5903 次
发布时间:2019-06-19

本文共 1949 字,大约阅读时间需要 6 分钟。

区块链兄弟社区,区块链技术专业问答先行者,中国区块链技术爱好者聚集地

作者:于中阳

来源:区块链兄弟

原文链接:http://www.blockchainbrother.com/article/73

著权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1.算法和密钥

密码算法(cryptographic algorithm)亦称为密码(cipher),其是用于加密和解密的数学函数。一般情况下,会有两个相关函数,一个用于加密,一个用于解密。

若给予算法的保密性仅仅是基于对保持算法本身的秘密,那么这种算法被称为受限的(restricted)算法。受限制的算法具有相当的历史意义,但按照现代的标准,其保密性已经远远不够。举一个例子,一个组织使用了一种算法,若有一个工作人员离开了这个组织,那么其他的工作者为了安全性就必须改变另外不同的算法。同时,若有人有意或无意的泄露了这个秘密,所有的人都必须改变他们的算法。

与此同时需要指出的是,受限制的密码算法不可能进行质量控制或标准化。每个用户组织必须拥有自己的唯一算法。这样的话,这些组织不可能采用流行的硬件或软件产品,因为窃听者是可以通过外界的购买得到这些产品并学习算法的,这就势必导致用户不得已必须自己编写算法并予以实现,但若这个组织中没有卓越的密码学家,那么他们是无从得知他们是否拥有了安全的算法。

当然,尽管如此受限制的算法在对密级要求低的应用场景中还是很流行的。

现代密码学用密钥(key)这个概念,尝试解决了这个问题,密钥用K来表示,K可以是很多数值里的任意值。密钥K的可能取值范围叫做密钥空间(keyspace)。加密和解密运算都会使用到这个密钥,即运算依赖于密钥,并用K作为下标表示。

以上这种情况,加密用到的密钥和解密用到的密钥是相同的。但有些算法使用的是不同的密钥进行加密和解密的,即加密密钥和解密密钥是不同的。

现在谈的这些算法的安全性都是基于密钥的安全性,而不是基于算法细节的安全性。这就意味着算法是可以公开的,也可以被分析。这样就可以大量生产使用算法的产品。即使窃听者知道了你使用的算法也没从破译,只要他不知道你具体使用的密钥,就无法阅读你的信息消息。

密码系统(cryptosystem)由算法以及所有可能的明文、密文和密钥组成。

2.对称算法

基于密钥的算法通常有两类:1)对称算法,2)公开密钥算法。对称算法(symmetric algorithm)又称为传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加密和解密的密钥是相同的。这些算法也称为秘密密钥算法或单密钥算法,其要求发送者和接收者在确保安全通信之前,协商出一个密钥。对称算法的安全性依赖于密钥,泄密密钥就意味着任何人都能对信息消息进行阅读、加密解密。注意,只要通信需要保密,密钥就必须保密。

对称算法又可为两类,一次仅对明文中的单个位(有时是对字节)运算的算法称为序列算法(stream algorithm)或序列密码(stream cipher)。

另一类算法是对明文的一组位进行运算,这些位组称为分组(block),相对应的算法就称为分组算法(block algorithm)或分组密码(block cipher)。

现代计算机密码算法的典型分组长度为64位,这个长度基本足以防止分析破译,但又十分方便使用。

注:在计算机出现之前,算法普遍的每次只对明文的一个字符运算,可以认为序列密码是对字符序列的运算。

3.公开密钥算法(非对称算法)

公开密钥算法(public-key algorithm,其有一个更为熟知的称谓叫非对称算法),这种算法是这样设计的,用作加密的密钥不同于用作解密的密钥,而且解密密钥不能根据加密密钥被计算得到。(注:在合理的假设时间内无法被计算得到即可)这种算法之所以叫做“公开密钥”算法,是因为加密密钥是可以公开的,即第三方是能够使用加密密钥对信息进行加密的,但只有用相应的解密密钥才可以对信息进行解密得到解密信息。

在此系统中,加密密钥称为公开密钥(public-key,简称公钥),解密密钥叫做私人密钥(private key,简称私钥)。私人密钥有时也称为秘密密钥,但为了避免同对称算法产生混淆,一般不采用秘密密钥这种叫法,一般就叫私钥。

注:必须用公钥加密和私钥解密的思维是受限的,有的时候,我们用私钥进行加密,用公钥进行解密,这种应用场景常见于数字签名。

文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述

转载于:https://juejin.im/post/5af92c3b518825673b62228f

你可能感兴趣的文章
(转)EOSIO开发(四)- nodeos、keosd与cleos
查看>>
MVC5+EF6 入门完整教程八
查看>>
Java 设计模式专栏
查看>>
常用Mysql或者PostGresql或者Greenplum的语句总结。
查看>>
工控随笔_12_西门子_WinCC的VBS脚本_03_变量类型
查看>>
appium 报错
查看>>
phpquery中文手册
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
Office文档出错的几种原因与解决方法
查看>>
正则表达式 学习笔记1.1
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
Ruby中写一个判断成绩分类的脚本
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
SCCM2012SP1---资产管理和远程管理
查看>>
org.springframework.util 类 Assert的使用
查看>>
更改UIView的背景
查看>>
JLNotebookView
查看>>