zoukankan      html  css  js  c++  java
  • 系统安全密码基本原理以及对称加密

    . 前言

     下面是一个消息传递的举例:针对信息发送者A,与信息接收者B,以及窃听者C,C有两种方式破坏安全: 

    1.窃取消息,作为接收方破解。

    2.窃取消息,作为发送方伪造发送。

    针对上述第一种情况,主要有对称加密和非对称加密两种方式保障。针对上述第二种情况,有诸多消息认证机制可以保障。

    本文将重点说明对称加密。其他内容可关注公众号:智能化IT系统。

    二. 密码学发展

    在开始,首先阐述一下安全加密机制的两大原则:

    ·        不使用保密的加密算法

    因为任何算法终究都将公开,不管是明是暗,此地无银三百两,意义不大。

    ·        不使用低强度的密码策略

    因为这样比不使用密码甚至更危险。暴力破解,无处不在。

    OK,那么我们就开始主题。我们先从历史上几个较为著名的加密算法开始说起。

    1. 凯撒密码

    原理非常简单,就是平移替换。按照字母表每一个字母向后平移N位,例如有一串明文abc,平移后变为DEF。同样是连续的。

    2. 简单替换密码

    原理同样简单,消息双方保存一份密码的对应表,在对应表中说明密码的对应关系,例如a对应D,b对应2,c对应G。那么abc加密后就位D2G。这个对应关系只有消息双方知道。

    3.  enigma

    这个和主题越来越接近了。这个其实就是第二次世界大战中,德国使用的密码机算法。消息的发送方和接收方有一个密码本,上面记载每日的密码。发送方通过其进行加密,接收方通过其进行解密。

    在这里,密码本,就可以理解为对称加密中的秘钥。

    三. 对称加密主要模式介绍

    对称加密的流程,和enigma有一定类似。我们下面从如下几方面开始介绍。

    ·        DES加密

    典型的对称加密方式。原理是把需要加密的原始数据,以8字节(64bit)进行分割,每8字节,都按照如下的方式进行16轮的加密,注意是16轮。每一轮加密,都将8字节分为前后32bit,后32bit无需任何加密,直接作为下一轮的前32bit。前32bit需要和后32bit以及本轮子秘钥的轮函数结果,做异或运算,得到结果,作为下一轮的后32bit,以此类推。

    下图是一个逻辑展示,注意是两轮,看了下图应该就基本清晰了。

    注意一点,每一轮的子密钥是不一样的。需要详细了解可以查一下Feistel网络结构。

    ·        3DES加密

    和名字的理解一样,就是三轮DES处理,注意第二轮是DES解密,并且三轮的秘钥都不一样。 

    3DES目前任然有很多公司使用,但是效率不高,安全性也逐步出现一些问题。

    ·        AES加密

    AES是目前对称加密的一个主流的趋势,相对算法略微复杂。

    AES的分组长度是128bit,16字节,也就是以16字节为单位,采用多轮Rijndeal加密和解密。

    这里以一轮为案例进行说明。在每一轮,将16个字节分为四组,每一组进行平移,平移之后每一个字节与轮秘钥进行异或处理,输出加密后的16字节。

    如下如所示:

    四. 对称加密迭代模式介绍

    至此,主要的加密方式的原理我们已经说完了。那么还有一个问题,原始消息肯定是长度不一的,DES的基本单位是16字节,AES是128字节,如果原始数据多于基本单位长度,如何迭代?下面介绍主要的迭代方式。

    ·        ECB

    每一组互不干扰。最后一组如果不够单位长度,padding填充,下面的每一种模式也是这样。

    ·        CBC

    第一个分组需要一个初始化向量,IV,与第一分组的明文进行异或,然后加密。

    ·        CTR

    如下图所示。

    目前CTR和CBC两种模式使用较多。

    ———————————————————

    公众号-智能化IT系统。每周都有技术文章推送,包括原创技术干货,以及技术工作的心得分享。扫描下方关注。

  • 相关阅读:
    cocos2d-x 配置教程
    cocos2d-x 学习笔记之 CCMenuItemToggle用法
    cocos2d-android-1学习之旅01
    博客园的代码高亮
    JAVA POI 应用系列(2)--读取Excel
    JAVA POI 应用系列(1)--生成Excel
    spring和hibernate的整合
    学习笔记
    mongorestore 命令行恢复 bson
    mysql 插数据 ,版本不一致 需要修改 utf8 COLLATE utf8_general_ci
  • 原文地址:https://www.cnblogs.com/xtary/p/9529368.html
Copyright © 2011-2022 走看看