密码学基础(二)算法和密钥「终于解决」

密码学基础(二)算法和密钥「终于解决」著权归作者所有。 密码算法(cryptographic algorithm)亦称为密码(cipher),其是用于加密和解密的数学函数。一般情况下,会有两个相关函数,一个用于加密,一个用于解密。 若给予算法的保密性仅仅是基于对保持算法本身的秘密,那么这种算法被称为受限的(rest…

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

作者:于中阳

来源:区块链兄弟

原文链接: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://daima100.com/13150.html

(0)

相关推荐

  • 用Python实现数据可视化,让数据更加直观易懂

    用Python实现数据可视化,让数据更加直观易懂在数据分析和挖掘过程中,我们需要通过各种方式去理解和呈现数据,其中,数据可视化是一种非常重要的技术手段,可以让我们将复杂的数据转化为直观、易懂的图表,帮助我们更好地理解数据背后的规律和趋势。Python作为一种强大的数据分析和可视化工具,在这方面也有着独特的优势。

    2023-08-24
    120
  • 第09期:有关 MySQL 字符集的乱码问题「终于解决」

    第09期:有关 MySQL 字符集的乱码问题「终于解决」相信大家通过前几篇文章,已经了解了 MySQL 字符集使用相关注意事项。那么数据乱码问题在这儿显得就非常简单了,或许说可能不会出现这样的问题。 数据之所以会乱码,在 MySQL 里无非有以下几类情况…

    2023-03-25
    155
  • SQL分库分表_分库分表 分页查询

    SQL分库分表_分库分表 分页查询历史背景 MySql性能瓶颈 1. 表数据量过大 2. Sql查询过于复杂 3. Sql没走索引 4. 数据库服务器性能低 解决方案 阿里开发手册:单表行数超过500W或者单表容量超过2G 数据库分库

    2023-05-03
    160
  • Python实现查找列表中的元素

    Python实现查找列表中的元素在日常的编程工作中,查找列表中的元素是必不可少的操作。Python作为一门简洁高效的编程语言,在查找列表元素方面也提供了多种实现方式。本文将从多个角度分析Python实现查找列表中的元素的方法,帮助读者更好地理解和运用这些方法。

    2024-04-24
    58
  • 爬虫爬取猫眼电影_python爬取豆瓣电影信息

    爬虫爬取猫眼电影_python爬取豆瓣电影信息采集字段:标题、咨询内容

    2023-06-17
    146
  • Python信号处理

    Python信号处理Python信号处理是指在Linux操作系统上,Python程序与操作系统之间进行通信的一种方式。当操作系统中发生某些特定事件时,操作系统会发出信号信号来通知Python程序,在接收到这些信号后,Python程序可以对信号进行响应,从而实现特定功能。

    2024-08-09
    31
  • mysql5.7.28之主主配置

    mysql5.7.28之主主配置1 简介 1.1 主从同步 MySQL的主从复制是一个异步的复制过程(虽然一般情况下感觉是实时的),数据将从一个MySQL数据库复制到另一个MySQL数据库,在master与Slave之间实现整个主…

    2023-04-07
    140
  • Python是否区分大小写?

    Python是否区分大小写?Python是一种高级编程语言,由Guido van Rossum于1989年底发明,首次在1991年发布。Python是一种解释型、面向对象、动态数据类型的语言,现在已经被广泛应用于各种领域,如Web开发、数据科学、人工智能等。

    2024-08-15
    26

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注