精华内容
下载资源
问答
  • HMAC算法安全性浅析
    万次阅读
    2016-06-30 22:55:20

    HMAC算法安全性浅析


    HMAC,全称为“Hash Message Authentication Code”,中文名“散列消息鉴别码”,主要是利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。一般的,消息鉴别码用于验证传输于两个共  同享有一个密钥的单位之间的消息。HMAC 可以与任何迭代散列函数捆绑使用。MD5 和 SHA-1 就是这种散列函数。 HMAC 还可以使用一个用于计算和确认消息鉴别值的密钥。

    HMAC,散列消息鉴别码,是基于密钥的 Hash 算法的认证协议。它的实现原理是,用公开函数和密钥产生一个固定长度的值作为认证标识,用这个标识鉴别消息的完整性。使用一个密钥生成一个固定大小的小数据块,即 MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证等。 

    这种结构的主要作用是:
    • 不用修改就可以使用适合的散列函数,而且散列函数在软件方面表现的很好, 并且源码是公开和通用的。
    • 可以保持散列函数原有的性能而不致使其退化。
    • 可以使得基于合理的关于底层散列函数假设的消息鉴别机制的加密强度分析 便于理解。
    • 当发现或需要运算速度更快或更安全的散列函数时,可以很容易的实现底层 散列函数的替换。

    定义 HMAC 需要一个加密用散列函数(表示为 H)和一个密钥 K。我们假设 H 是  一个将数据块用一个基本的迭代压缩函数来加密的散列函数。我们用 B 来表示数据块 的字长。(以上提到的散列函数的分割数据块字长 B = 64),用 L 来表示散列函数的 输出数据字长(MD5中 L = 16 , SHA-1 中 L = 20)。鉴别密钥的长度可以是小于等于数 据块字长的任何正整数值。应用程序中使用的密钥长度若是比 B 大,则首先用使用散列 函数 H 作用于它,然后用 H 输出的 L 长度字符串作为在 HMAC 中实际使用的密钥。 一般情况下,推荐的最小密钥 K 长度是 L 个字长。(与 H 的输出数据长度相等)。

    我们将定义两个固定且不同的字符串 ipad,opad: (‘i’,‘o’表示内部与外部) 

    • ipad = the byte 0x36 repeated B times
    • opad = the byte 0x5C repeated B times

    计算‘text’的 HMAC:

    • H (K XOR opad, H (K XOR ipad, text))

    计算步骤

    • 在密钥 K 后面添加 0 来创建一个子长为 B 的字符串。(例如,如果 K 的字长是 20 字节,B=60 字节,则 K 后会加入 44 个零字节0x00)
    • 将上一步生成的 B 字长的字符串与 ipad 做异或运算
    • 将数据流 text 填充至第二步的结果字符串中
    • 用 H 作用于第三步生成的数据流
    • 将第一步生成的 B 字长字符串与 opad 做异或运算
    • 再将第四步的结果填充进第五步的结果中
    • 用 H 作用于第六步生成的数据流,输出最终结果

    密钥

    用于 HMAC 的密钥可以是任意长度(比 B 长的密钥将首先被 H 处理)。但当密钥  长度小于 L 时,会降低函数的安全强度。长度大于  L 的密钥也是可以的,但额外的长度并不能显著的提高函数的安全强度。

    密钥必须随机选取(或使用强大的基于随机种子的伪随机生成方法),并且要周期 性的更新。目前的攻击没有指出一个有效的更换密钥的频率,因为那些攻击实际上并 不可行。然而,周期性更新密钥是一个对付函数和密钥所存在的潜在缺陷的基本 的安全措施,并可以降低泄漏密钥带来的危害。

            1 引言

            2004年8月17日在美国加州圣巴巴拉召开的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告。报告结束时,与会者长时间起立鼓掌致敬,这在密码学会议上是少见的盛况。

            然而,更让密码学界震惊的是,2005年2月15日,在美国召开的国际信息安全RSA研讨会上,国际著名密码学专家Adi Shamir宣布,他收到了王小云、尹依群、于红波等三人的论文,论文证明SHA-1在理论上也被破解。这是继王小云破译MD5之后,国际密码学领域的又一突破性研究成果,而破译只用了两个多月的时间。

            王小云教授的研究成果作为密码学领域的重大发现宣告了固若金汤的世界通行密码标准MD5和SHA-1的堡垒轰然倒塌,引发了密码学界关于MD5和SHA-1产品是否还能够使用的大辩论。那么,使用MD5和SHA-1的HMAC算法是不是也已经不安全,应该被淘汰了?本文对HMAC算法安全性进行简单分析。

            2 HASH函数

            MD5和SHA-1是一种HASH函数,又称杂凑函数,类似于指纹的应用。在网络安全协议中,杂凑函数用来处理电子签名,将冗长的签名文件压缩为一段独特的数字信息,像指纹鉴别身份一样保证原来数字签名文件的合法性和安全性。经过这些算法的处理,原始信息即使只更动一个字母,对应的压缩信息也会变为截然不同的“指纹”,这就保证了经过处理信息的唯一性。为电子商务等提供了数字认证的可能性。

            安全的杂凑函数在设计时必须满足两个要求:

        寻找两个输入得到相同的输出值在计算上是不可行的,这就是我们通常所说的抗碰撞的;

        找一个输入,能得到给定的输出在计算上是不可行的,即不可从结果推导出它的初始状态。

      王教授的研究成果是在已知输出时,可以较容易地构造出一个输入,使输入经过HASH后,与已知的输出一致。这个成果,从理论上证明了MD5和SHA-1不是安全的HASH函数。

            3 HMAC算法

            3.1 定义[2]

            定义HMAC需要一个加密用散列函数(表示为H,可以是MD5或者SHA-1)和一个密钥K。我们用B来表示数据块的字节数。(以上所提到的散列函数的分割数据块字长B=64),用L来表示散列函数的输出数据字节数(MD5中L=16,SHA-1中L=20)。鉴别密钥的长度可以是小于等于数据块字长的任何正整数值。应用程序中使用的密钥长度若是比B大,则首先用使用散列函数H作用于它,然后用H输出的L长度字符串作为在HMAC中实际使用的密钥。一般情况下,推荐的最小密钥K长度是L个字节。

            我们将定义两个固定且不同的字符串ipad,opad:(‘i','o'标志内部与外部)

            ipad = the byte 0x36 重复 B 次

            opad = the byte 0x5C 重复 B 次.

            计算‘text'的HMAC:

            HMAC = H( K XOR opad, H(K XOR ipad, text))

            即为以下步骤:

            (1) 在密钥K后面添加0来创建一个字长为B的字符串。(例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00)

            (2) 将上一步生成的B字长的字符串与ipad做异或运算。

            (3) 将数据流text填充至第二步的结果字符串中。

            (4) 用H作用于第三步生成的数据流。

            (5) 将第一步生成的B字长字符串与opad做异或运算。

            (6) 再将第四步的结果填充进第五步的结果中。

            (7) 用H作用于第六步生成的数据流,输出最终结果

            3.2 HMAC的典型应用

      HMAC的一个典型应用是用在“挑战/响应”(Challenge/Response)身份认证中,认证流程如下[3]:

            (1) 先由客户端向服务器发出一个验证请求。

            (2) 服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为挑战)。

            (3) 客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应)。

            (4) 与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户

            3.3 安全性浅析

            由上面的介绍,我们可以看出,HMAC算法更象是一种加密算法,它引入了密钥,其安全性已经不完全依赖于所使用的HASH算法,安全性主要有以下几点保证:

            (1) 使用的密钥是双方事先约定的,第三方不可能知道。由3.2介绍的应用流程可以看出,作为非法截获信息的第三方,能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。

            (2) 王教授的研究成果不适用。王教授的研究成果是在已知输出时,可以较容易地构造出一个输入,使输入经过HASH后,与已知的输出一致。而在HMAC应用中,第三方不可能事先知道输出(如果知道,不用构造输入,直接将输出送给服务器即可)。

            (3) HMAC与一般的加密重要的区别在于它具有“瞬时”性,即认证只在当时有效,而加密算法被破解后,以前的加密结果就可能被解密。

            4 结论

      综上所述,MD5和SHA-1被破解,对实际应用的冲击要远远小于它的理论意义[1]。而且,它的冲击集中在PKI和数字签名体系中,对使用MD5和SHA-1的HMAC算法并不构成威胁。特别是象“挑战/响应”身份认证应用中,由于攻击者无法事先获得HMAC的计算结果,对系统的攻击只能使用穷举或“生日攻击”的方法,但计算量巨大,基本不可行。所以,在目前的计算能力下,可以认为HMAC算法在“挑战/响应”身份认证应用中是安全的。

    参考文献

    [1] 李丹,龙毅宏,“MD5被破解对实际应用的影响”,《信息安全与通信保密》总136期

    [2] RFC2104--HMAC: Keyed-Hashing for Message Authentication

    [3] 飞天诚信,“ePass身份认证锁在气象预报系统中的应用”
    更多相关内容
  • 数据安全及各种加密算法对比

    万次阅读 2018-06-22 11:55:40
    然而市场上存在着各种各样的抓包工具及解密算法,甚至一些公司有专门的逆向部门,这就加大了数据安全的风险,本文将通过以下几个方面对各种加密算法进行分析对比:Base64编码(基础)单项散列函数 MD5、SHA1、SHA256...

    平时开发中不仅会遇到各种需要保护用户隐私的情况,而且还有可能需要对公司核心数据进行保护,这时候加密隐私数据就成为了必要。然而市场上存在着各种各样的抓包工具及解密算法,甚至一些公司有专门的逆向部门,这就加大了数据安全的风险,本文将通过以下几个方面对各种加密算法进行分析对比:

    • Base64编码(基础)
    • 单项散列函数 MD5、SHA1、SHA256、SHA512等
    • 消息认证码 HMAC-MD5、HMAC-SHA1
    • 对称加密 DES|3DES|AES(高级加密标准)
    • 非对称加密 RSA
    • 数字签名
    • 证书

    通常我们对消息进行加解密有两种处理方式:

    1. 只需要保存一个值,保证该值得机密性,不需要知道原文(用户登录)
    2. 除了保证机密性外还需要对加密后的值进行解密得到原文

    Base64编码

    由于我们可能对各种各样的数据进行加密,比如:视频、音频、文本文件等,所以加密之前我们需要统一文件类型,然后再进行加密处理。

    • Base64编码
    // 要编码的字符串
    NSString *str = @"haha";
    
    // 转换成二进制文件
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
    
    // 进行base64编码
    NSString *dataStr = [data base64EncodedStringWithOptions:kNilOptions];
    
    NSLog(@"%@", dataStr);
    
    
    • Base64解码
    // 先对数据进行解码
    NSData *encData = [[NSData alloc]initWithBase64EncodedString:dataStr options:kNilOptions];
        
    // 将二进制数据转换成字符串
    NSString *encStr = [[NSString alloc]initWithData:encData encoding:NSUTF8StringEncoding];
        
    NSLog(@"%@", encStr);
    

    接下来分析一下Base64的编码过程,参考维基百科:

    image

    如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。也就是说,当最后剩余两个八位字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。 参考下表:

    image
    • Base64编码原理
    1. 将所有字符串转换成ASCII码
    2. 将ASCII码转换成8位二进制
    3. 将二进制三位归成一组(不足三位在后边补0),再按每组6位,拆成若干组
    4. 统一在6位二进制后不足8位的补0
    5. 将补0后的二进制转换成十进制
    6. 从Base64编码表取出十进制对应的Base64编码

    若原数据长度不是3的倍数时且剩下1个输入数据,则在编码结果后加2个=;若剩下2个输入数据,则在编码结果后加1个=

    如上面的例子:

    原数据为A,数据长度为1,1 % 3 = 1 后面加两个==

    原数据为bc,数据长度为2,2 % 3 = 2 后面加一个=

    • Base64编码的特点
    1. 可以将任意的二进制数据进行Base64编码。
    2. 所有的数据都能被编码为并只用65个字符就能表示的文本文件。
    3. 编码后的65个字符包括AZ,az,0~9,+,/,=
    4. 对文件或字符串进行Base64编码后将比原始大小增加33%。
    5. 能够逆运算
    6. 不够安全,但却被很多加密算法作为编码方式

    单项散列函数

    单向散列函数也称为消息摘要函数、哈希函数或者杂凑函数。
    单向散列函数输出的散列值又称为消息摘要或者指纹

    特点:

    1. 对任意长度的消息散列得到散列值是定长的
    2. 散列计算速度快,非常高效
    3. 消息不同,则散列值一定不同
    4. 消息相同,则散列值一定相同
    5. 具备单向性,无法逆推计算

    经典算法:

    • MD4、MD5、SHA1、SHA256、SHA512等

    安全性:

    • md5解密网站:http://www.cmd5.com
    • MD5的强抗碰撞性已经被证实攻破,即对于重要数据不应该再继续使用MD5加密。

    疑问一:单项散列函数为什么不可逆??

    原来好多同学知识知道md5加密是不可逆的,却不知道是为什么,其实散列函数可以将任意长度的输入经过变化得到不同的输出,如果存在两个不同的输入得到了相同的散列值,我们称之为这是一个碰撞,因为使用的hash算法,在计算过程中原文的部分信息是丢失了的,一个MD5理论上可以对应多个原文,因为MD5是有限多个,而原文是无限多个的。

    网上看到一个形象的例子:2 + 5 = 7,但是根据 7 的结果,却并不能推算出是由 2 + 5计算得来的

    疑问二:为什么有些网站可以解密MD5后的数据??

    MD5解密网站,并不是对加密后的数据进行解密,而是数据库中存在大量的加密后的数据,对用户输入的数据进行匹配(也叫暴力碰撞),匹配到与之对应的数据就会输出,并没有对应的解密算法。

    MD5改进

    由以上信息可以知道,MD5加密后的数据也并不是特别安全的,其实并没有绝对的安全策略,我们可以对MD5进行改进,加大破解的难度,典型的加大解密难度的方式有一下几种:

    1. 加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5
    2. 先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序
    3. 先乱序,后加密:先对明文字符串进行乱序处理,然后对得到的串进行加密
    4. 先乱序,再加盐,再MD5等
    5. HMac消息认证码

    也可以进行多次的md5运算,总之就是要加大破解的难度。

    Hmac消息认证码(对MD5的改进)

    原理:

    1. 消息的发送者和接收者有一个共享密钥
    2. 发送者使用共享密钥对消息加密计算得到MAC值(消息认证码)
    3. 消息接收者使用共享密钥对消息加密计算得到MAC值
    4. 比较两个MAC值是否一致

    使用:

    1. 客户端需要在发送的时候把(消息)+(消息·HMAC)一起发送给服务器
    2. 服务器接收到数据后,对拿到的消息用共享的KEY进行HMAC,比较是否一致,如果一致则信任
    image

    对称加密算法

    对称加密的特点:

    • 加密/解密使用相同的密钥
    • 是可逆的

    经典算法:

    • DES 数据加密标准
    • 3DES 使用3个密钥,对消息进行(密钥1·加密)+(密钥2·解密)+(密钥3·加密)
    • AES 高级加密标准

    密码算法可以分为分组密码和流密码两种:

    • 分组密码:每次只能处理特定长度的一zu数据的一类密码算法。一个分组的比特数量就称之为分组长度。
    • 流密码:对数据流进行连续处理的一类算法。流密码中一般以1比特、8比特或者是32比特等作为单位俩进行加密和解密。

    分组模式:主要有两种

    • ECB模式(又称电子密码本模式)
      • 使用ECB模式加密的时候,相同的明文分组会被转换为相同的密文分组。
      • 类似于一个巨大的明文分组 -> 密文分组的对照表。
    image

    某一块分组被修改,不影响后面的加密结果

    • CBC模式(又称电子密码链条)

      • 在CBC模式中,首先将明文分组与前一个密文分组进行XOR(异或)运算,然后再进行加密。
      • 每一个分组的加密结果依赖需要与前一个进行异或运算,由于第一个分组没有前一个分组,所以需要提供一个初始向量iv
      image

    某一块分组被修改,影响后面的加密结果

    代码演示两种分组模式

    • AES - ECB模式

    加密:

        /**
         *  加密字符串并返回base64编码字符串
         *
         *  @param string    要加密的字符串
         *  @param keyString 加密密钥
         *  @param iv        初始化向量(8个字节)
         *
         *  @return 返回加密后的base64编码字符串
         */
        NSLog(@"%@", [[EncryptionTools sharedEncryptionTools] encryptString:@"haha" keyString:@"abc" iv:nil]);
        
        // 输出 MIoAu+xUEpQZSUmkZUW6JQ==
    

    解密:

    NSLog(@"%@", [[EncryptionTools sharedEncryptionTools] decryptString:@"MIoAu+xUEpQZSUmkZUW6JQ==" keyString:@"abc" iv:nil]);
        
    // 输出 haha
    
    • AES - CBC模式

    加密:

    uint8_t iv[8] = {1,2,3,4,5,6,7,8};
    
    NSData *data = [[NSData alloc] initWithBytes:iv length:sizeof(iv)];
    
    NSLog(@"%@", [[EncryptionTools sharedEncryptionTools] encryptString:@"haha" keyString:@"abc" iv:data]);
        
    // 输出 E/wWqUTiw/E+1DThAzV39A==
    

    解密:

    NSLog(@"%@", [[EncryptionTools sharedEncryptionTools] decryptString:@"E/wWqUTiw/E+1DThAzV39A==" keyString:@"abc" iv:data]);
        
    // 输出 haha
    

    对称加密存在的问题??

    很明显,对称加密主要取决于秘钥的安全性,数据传输的过程中,如果秘钥被别人破解的话,以后的加解密就将失去意义

    image

    其实有点儿类似于我们平常看的谍战类的电视剧,地下党将情报发送给后方,通常需要一个中间人将密码本传输给后方,如果中间人被抓交出密码本,那么将来所有的情报都将失去意义,由此可见情报工作多么的重要!!!

    对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了

    非对称加密

    鉴于对称加密存在的风险,非对称加密应运而生

    特点:

    • 使用公钥加密,使用私钥解密
    • 公钥是公开的,私钥保密
    • 加密处理安全,但是性能极差

    非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥,但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快

    经典算法:

    • RSA
    RSA算法原理
    * 求N,准备两个质数p和q,N = p x q
    * 求L,L是p-1和q-1的最小公倍数。L = lcm(p-1,q-1)
    * 求E,E和L的最大公约数为1(E和L互质)
    * 求D,E x D mode L = 1
    
    RSA加密实践
    * p = 17,q = 19 =>N = 323
    * lcm(p-1,q-1)=>lcm(1618)=>L= 144
    * gcd(E,L)=1 =>E=5
    * E乘以几可以mode L =1? D=29可以满足
    * 得到公钥为:E=5,N=323
    * 得到私钥为:D=29,N=323
    * 加密 明文的E次方 mod N = 1235次方 mod 323 = 225(密文)
    * 解密 密文的D次方 mod N = 22529次方 mod 323 = 123(明文)
    
    openssl生成密钥命令
    • 生成强度是 512 的 RSA 私钥:$ openssl genrsa -out private.pem 512
    • 以明文输出私钥内容:$ openssl rsa -in private.pem -text -out private.txt
    • 校验私钥文件:$ openssl rsa -in private.pem -check
    • 从私钥中提取公钥:$ openssl rsa -in private.pem -out public.pem -outform PEM -pubout
    • 以明文输出公钥内容:$ openssl rsa -in public.pem -out public.txt -pubin -pubout -text
    • 使用公钥加密小文件:$ openssl rsautl -encrypt -pubin -inkey public.pem -in msg.txt -out msg.bin
    • 使用私钥解密小文件:$ openssl rsautl -decrypt -inkey private.pem -in msg.bin -out a.txt
    • 将私钥转换成 DER 格式:$ openssl rsa -in private.pem -out private.der -outform der
    • 将公钥转换成 DER 格式:$ openssl rsa -in public.pem -out public.der -pubin -outform der
    非对称加密存在的安全问题

    原理上看非对称加密非常安全,客户端用公钥进行加密,服务端用私钥进行解密,数据传输的只是公钥,原则上看,就算公钥被人截获,也没有什么用,因为公钥只是用来加密的,那还存在什么问题呢??那就是经典的中间人攻击

    image

    废了半天劲画的图,太low了,我还是自己总结一遍吧!!!

    中间人攻击详细步骤:

    1. 客户端向服务器请求公钥信息
    2. 服务端返回给客户端公钥被中间人截获
    3. 中间人将截获的公钥存起来
    4. 中间人自己伪造一套自己的公钥和私钥
    5. 中间人将自己伪造的公钥发送给客户端
    6. 客户端将重要信息利用伪造的公钥进行加密
    7. 中间人获取到自己公钥加密的重要信息
    8. 中间人利用自己的私钥对重要信息进行解密
    9. 中间人篡改重要信息(将给客户端转账改为向自己转账)
    10. 中间人将篡改后的重要信息利用原来截获的公钥进行加密,发送给服务器
    11. 服务器收到错误的重要信息(给中间人转账)

    疑问一:为什么会造成中间人攻击??

    造成中间人攻击的直接原因就是客户端没办法判断公钥信息的正确性。

    疑问二:怎么解决中间人攻击??

    需要对公钥进行数字签名。就像古代书信传递,家人之所以知道这封信是你写的,是因为信上有你的签名、印章等证明你身份的信息。

    数字签名需要严格验证发送发的身份信息!!!

    数字证书

    数字证书包含:

    • 公钥
    • 认证机构的数字签名(权威机构CA)

    数字证书可以自己生成,也可以从权威机构购买,但是注意,自己生成的证书,只能自己认可,别人都不认可.

    权威机构签名的证书:
    GitHub官网为例,Chrome浏览器打开网址,地址栏有一个小绿锁,点击,内容如下:

    权威机构认证的证书:

    image

    可以看到连接是安全的,点击证书可以看到详细信息

    image

    这是由权威机构认证的证书,但是是需要花钱的,一年至少得一两千,所以也有些公司用自己签名的证书,自己签名的证书不被信任,可能会提示用户有风险,比如原来的12306网站,现在大多数网站也都采用了CA签名数字证书进行签名,自己做签名的也不好找了!!!12306都改成CA认证的了。。。

    自己生成一个证书

    • 生成私钥
    openssl genrsa -out private.pem 1024
    
    • 创建证书请求
    openssl req -new -key private.pem -out rsacert.csr
    
    • 生成证书并签名,有效期10年
    openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt
    
    • 将 PEM 格式文件转换成 DER 格式
    openssl x509 -outform der -in rsacert.crt -out rsacert.der
    
    • 导出P12文件
    openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt
    image

    注意:

    • 在iOS开发中,不能直接使用 PEM 格式的证书,因为其内部进行了Base64编码,应该使用的是DER的证书,是二进制格式的
    • OpenSSL默认生成的都是PEM格式的证书

    代码演示:

    // p12 是私钥
        // .der 是公钥
        // 非对称加密,使用公钥加密,私钥解密
        
        // 加载公钥
        [[RSACryptor sharedRSACryptor] loadPublicKey:[[NSBundle mainBundle] pathForResource:@"rsacert.der" ofType:nil]];
        
        // 对数据加密
        NSData *data = [[RSACryptor sharedRSACryptor] encryptData:[@"hahaha" dataUsingEncoding:NSUTF8StringEncoding]];
        
        // 对加密得到的密文进行base64编码打印
        NSLog(@"%@", [data base64EncodedStringWithOptions:kNilOptions]);
        
        // 输出结果:PflhCgTVNegcQXrb39RJOoxCRRIHuZ3LN0/hoxTDFBbC+8yKjp0m+/hxVUWBVsTo28WnNFCAFfrQ2of5SkqttD51a5eLb21R7bQSQRxg/gVZ5hePcE3vh7Slfcxm2qJM+J8hRWDP/MF4BiDLXI9ZqTpLCSS5mjJtmUBf2wNvI1Y=
        
        // 私钥解密
        
        // 加载私钥
        [[RSACryptor sharedRSACryptor] loadPrivateKey:[[NSBundle mainBundle] pathForResource:@"p.p12" ofType:nil] password:@"123456"];
    
        // 解密
        NSData *decryDeta = [[RSACryptor sharedRSACryptor] decryptData:data];
        
        NSLog(@"%@", [[NSString alloc] initWithData:decryDeta encoding:NSUTF8StringEncoding]);
        
        // 输出:hahaha
    

    代码地址

    总结

    至此数据安全和加解密相关结算完毕,写博客的过程,也是学习的过程,断断续续的写了三四天,总算写完了,同时也对原来一些模糊的概念有了更清晰的认识,写的这篇文章看了小码哥文顶顶老师的视频,受益匪浅,十分感谢,最近学习发现,学的越多,感觉会的越少,时间十分的不够用。同时渴望遇到一些希望进步、不甘平凡的同行!!!共勉!!!



    作者:czj_warrior
    链接:https://www.jianshu.com/p/b44927161081
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
    展开全文
  • 接口安全设计之算法

    2021-08-15 17:36:45
    一、一致性/签名算法 二、加密/解密算法 三、身份ID产生算法

    一、一致性/签名算法

    这类算法有很多,流行的有MD4/MD5(128bit)、SHA-1(160bit)、SHA-2(含SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256)、HMAC等。MD即Message Digest,SHA即Secure Hash Algorithm,他们的本质都是HASH(哈希/散列)算法。

    (一)HASH介绍

    HASH是一种将可变长的字符串(甚至无限长)变成固定长度输出(即消息摘要)的算法,算法很多,比如映射为128位(MD5)。为什么可变长能映射到固定长度呢?首先是对可变长的字符串信息进行切割分组(比特级别的分组),形成原始“信息料”。然后将这些信息料逐一喂给内部的“压缩算法”,相当于对信息不断循环进行压缩,最后压缩成一个固定长度的字符串。开始时候,涉及一个初始输入,谓之“初始向量”。所谓的压缩算法,就是各种异或和移位操作。理想情况一般是:固定长度字符串的每个字符,都能尽量关联输入字符串的所有字符信息;同样,输入端的任何一个字符改变,都能均匀地反映到输出端所有字符上,比如输入差别一个字符,输出完全不一样(即雪崩效应)。除了寻址空间变大外,这个集中性和均匀性映射关系就是各类算法努力的方向。

    (二)MD2介绍

    上述的这些算法,他们的鼻祖其实是MD2,只是后来者位数更多,算法更优而已,思路大体还是沿用MD2的,所以这里大概介绍一下MD2设计思路。

    MD2:文章参考来自知乎https://zhuanlan.zhihu.com/p/113198626

    第一步:分组(每组16字节,也包括初始向量),不足位数的补齐。

    第二步:MD函数对第1个分组进行压缩运算,输出结果作为第二个分组的输入。后续以此执行,直到所有的分组都被压缩到。

    第三步:不断循环第二部,执行多轮

    第四步:输出固定长度的字符串128bit

    图1 MD2过程

    (三)HMAC介绍

    另外一个常用的是HMAC算法。HMAC即Hash-based Message Authentication Code,一种基于Hash函数和密钥进行消息认证的方法,广泛应用于互联网认证协议中。

    HMAC算法公式: HMAC(K,M)=H((K’⊕opad)∣H((K’⊕ipad)∣M))

    该算法拥有两个输入:K是分配的KEY,即密钥;M是Message,比如随机数、ID之类。H是指哈希算法,可指定各类哈希算法;K‘是经K变换而来的;ipad/opad是一些常量。或运算可以看出是字符串追加,也可以理解为加锁。该公式直白点解释就是,利用密钥对Message层层上锁,最终得到一个不可逆的签名。将这个签名发给分配KEY的那端比如后台,后台将该KEY和自己分配出去的Message做一次HMAC运算,若匹配则通过身份验证。所以利用HMAC执行身份验证的流程大致如下:

    1、客户端和后台提前约定一个KEY(或者通过接口分配)

    2、后台通过接口分配一个Message给客户端(该Message就是一个身份ID,比如随机数);

    3、客户端对Message执行加签操作HMAC(KEY, Message),得到签名;

    4、将该签名发送给后台,后台采用Message和Key同样执行HMAC运算校验签名,验证身份。

    该流程中,HMAC内部会执行HASH运算进行加签,但重点是KEY和Message都是后台分配的,所以能够验证身份。

    (四)加盐

    加盐(我自己喜欢叫撒盐),就是在一段字符串或者比特上,掺杂点扰动(好比往水里撒点盐,变了味道),以达到混淆视听,使得要保护的目标更安全。加盐算法可以随意,自己乐意就行。

    举个例子,网站存储你的登录密码,明文存储肯定不可行(岂不是一下子就泄漏了),所以一般会做HASH运算存储比如MD5,即存储密码的MD5。正常来说,MD5是不可逆的,即使泄露别人也猜不到真实密码是什么。但是,就怕像这样的穷举网站 https://www.cmd5.com/,通过事先计算好的MD5(一般是针对常用的简单密码)进行碰撞破解。所以,教会我们密码真不能简单设置。为了提升这种碰撞的难度,网站做了一点优化:在输入的密码上加点盐(可以后面/前面/中间或者其他位置),再执行MD5,然后存储。这样泄露出去,碰撞破解就没那么容易了(除非知道加盐的规则)。

    所以,加盐能提升保护级别。加盐跟加密不同,加盐是在原文上掺杂一些扰动,加密则是将原文执行一次映射。

    二、加密/解密算法

    (一)对称加密

    加解密采用一样密钥,块运算,速度快,适合大数据,要防止密钥泄露。

    DES(Data Encryption Standard):数据加密标准,是一种使用密钥加密的块算法,适用于加密大量数据的场合(64bit分组)。DES的密钥的位数太短,只有56bit,另外加8bit校验码,安全性不高。
    3DES(Triple DES):基于DES,对一块数据用三个不同的密钥进行三次加密,是向AES过渡的加密算法;
    AES(Advanced Encryption Standard):高级加密标准,替代DES;有时也叫Rijndael加密,密钥长度128bit、192bit或256bit,安全性高。另外效率也高,128~256bit分组。

    对称加密的特点:

    1、加密速度快,适合大文件加密;

    2、一般结合base64使用

    加密模式:

    ECB(电子密码本):分块独立加密,并行加密,速度快

    CBC(密码块链接):明文块与密文块串行加密,速度慢

    图3 CBC(图片转自:https://www.cnblogs.com/happyhippy/archive/2006/12/23/601353.html

    备注:CBC有存在被攻击的可能性,这种攻击叫Padding Oracle Attack,就是虽然不知道私钥是什么,但是可以通过修改/增删分组的padding,让私钥解密。私钥解密结果要么padding长度不对,要么padding长度正确,由于这两个结果在早期TLS中会有不同返回值,因此可以被黑客利用。黑客利用一次“padding长度正确”的判定猜出分组的一点信息,一点一点猜测,最终破译密文分组。所以安全性高的场合,不宜用CBC模式。

    (二)非对称加密

    加解密分别采用公钥/私钥,可对称使用,即公钥加密则私钥解密,私钥加密则公钥解密。运算慢,适合小数据量,但安全度高。

    RSA,支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的。密钥越长,越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位,因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。

    ECC(Elliptic Curves Cryptography),椭圆曲线密码编码学,和RSA相比抗攻击性更强。

    (三)结合使用

    一般会使用非对称加密传输对称加密的密钥,然后数据再使用对称加密进行传输。

    三、身份ID产生算法

    身份ID一般会采用或者包含随机数,随机数的空间要足够大,避免重复冲突。

    随机数产生算法:

    (一)线性同余法(LCG):

    X(n+1) = [a * X(n) + c] mod m

    其中,X(n)为伪随机序列,初始值x(0)一般叫做seed(种子)。

    (二)Mersenne Twister法

    一种能快速生成高质量伪随机数算法,在各种编程语言和库中普遍应用,甚至默认的伪随机数发生器。

    (三)其它算法

    但是一般在程序中,无需自己去研究这些算法,各种语言都有库封装,直接调用随机数接口/函数即可,比如random()或者randomUUID()之类。

    UUID是一类比较不错的身份ID选择,命名空间足够大。

    UUID格式:xxxxxxxx—xxxx—xxxx—xxxx—xxxxxxxxxxxx,32个十六进制数,128 bit

    UUID也分多个版本,主要是通过时间戳、随机数、MAC地址、Hash值(比如MD5/SHA-1)等组合实现。对程序来说,除了选择一种较好的身份ID生成方式外,更重要是要关注和维护这些随机数的分配规则。

    展开全文
  • 网络安全认证与加密协议算法整合

    千次阅读 2020-12-31 11:52:31
    S/MIME 是一种Internet标准,它在安全方面对MIME协议进行了扩展,可以将MIME实体(比如数字签名和加密信息等)封装成安全对象,为电子邮件应用增添了消息真实性、完整性和保密性服务。 : S/MIME 7. RFC5322 定义了...

    –经典加密–

    1. Caesar Code

    old letter + 3 = new letter
    🔗 : 凯撒密码

    2. Vigenėre Cipher

    铭文 & key -> 密文
    ( N * N)表格,类似二维坐标系寻找对应坐标。
    🔗 : Vigenère密码

    3. Playfair Square

    1)将词填入5*5格中,I/J视为同一字
    2)两两划分,矩形法求编码

    • 常规,矩形的另外两个对角
    • 同行,右移一位
    • 同列,下移一位

    🔗 : 波雷费密码

    4. 一次性密钥

    优点:随机、无法破解、stream cipher、 与明文无关系
    缺点:key传输与保护、容易出错、消息传输

    基本原理:
    在这里插入图片描述

    5. Diffie-Hellman

    是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
    简而言之,是一个生成密钥的过程。
    🔗 : 迪菲-赫尔曼密钥交换

    其中A和B的沟通中计算出来的Key,就类似信道。如果存在等量关系Key A = Key B,则可以说明A就是和B在通信。
    在这里插入图片描述

    Man-in-the-middle (中间人攻击)

    出现了一个在A和B之间的C截获了数据,并将自己的公钥伪装成A/B的,让二人误以为在跟对方通信。
    在这个场景中,上述说的Key A = Key B的等价关系就不存在了。相反,A和C、C和B分别建立起来了两个等价关系。
    在这里插入图片描述
    🔗 : 中间人攻击

    6. RSA

    1)产生public和private key。
    在这里插入图片描述
    2)加密消息
    消息转为Unicode编码,拼成一串长数字,按照划分(用接收者的公钥)加密。
    在这里插入图片描述

    3)解密消息
    接收者用自己的密钥解密。
    在这里插入图片描述

    7. LRC

    🔗 : 纵向冗余检查
    在这里插入图片描述

    8. DES

    Data Encryption Standard。是基于拆分,substitution再合并的过程。
    代表性步骤参考S-Box
    6位:011010
    分割成:【首尾】00,【剩余】1101
    转为十进制【13,0】在表格中找 = 9
    转为二进制 1001

    🔗 : DES

    9. AES

    block cipher : 以block为单位执行。

    AddRoundKey 回合密钥运算
    矩阵中的每一个字节都与该次回合密钥(round key)做XOR运算, 产生很多子密钥。

    Substitute Bytes 查找表替换字节
    透过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。

    ShiftRows 循环移位
    将矩阵中的每个横列进行循环式移位。

    MixColumns 充分混合
    为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。

    🔗 : AES

    10. 改进操作

    在这里插入图片描述
    🔗 : 分组密码工作模式

    ECB

    Electronic Code Book,电子密码本。
    64位的块用同样的密钥加密。
    在这里插入图片描述

    CBC

    Cipher Block Chaining, 密码块链接。
    每个明文块先与前一个密文块进行XOR后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。
    在这里插入图片描述

    CFB

    Cipher feedback,密文反馈。
    类似于CBC。会有丢弃的过程。
    在这里插入图片描述
    Error Propagation
    但是会出现问题 : 如果初始64bit出现错误,他可能会转移到下面的8bit。

    OFB

    Output feedback,输出反馈。
    它产生密钥流的块,然后将其与明文块进行XOR,得到密文。
    在这里插入图片描述

    CTR

    Counter mode,计数器模式。
    它通过递增一个加密计数器以产生连续的密钥流。
    在具体细节上,与OFB相似,CTR将块密码变为流密码。在图解流程中,又和ECB相似。
    在这里插入图片描述


    –Hash加密–

    用途:用户在设置密码时不能把铭文存储在数据库中,因为有被最高权限人员知道的风险。所以将密码通过Hush加密后勋在数据库中。这个过程因为是不可逆的,因此比较安全。
    风险:计算常用密码的Hash可以用来匹配和暴力破解。

    1. SHA1

    在这里插入图片描述
    1)先对明文分组,每组为512bits
    2)内部再分为16 * 32 bits的长度,进行特定的哈希运算
    3)将Hash结果(第一组)与初始链接变量求和
    4)将其作为链接变量不断传递到下一组的计算中
    5)产生的160bit diggest就是SHA1的摘要

    2. Birthday attack

    类似数学中最常见的概率论“一个班级中两个人同天生日的概率”问题。这就是对上面哈希方法的风险分析过渡了——如果我们把有限的密码的哈希值全部计算出来,那么总会有密码就是和计算哈希库试用的密码是一致的。
    (比如说程序员最爱用的密码123456,我就用这个算出来的哈希结果H0。虽然确实10个人中9个不是这么设的,但是我比对出来的和计算的哈希结果H0相等的人中,有概率就有一个人用的密码就是123456)
    🔗:生日攻击


    –消息验证–

    1. MAC

    在发消息的时候就通过算法编码得到M0,在收到信息的时候再将消息编码得到M1,最后将二者的编码结果比较是否一致,以此判断整个传输过程的消息完整性。
    其中,算法函数MAC(m)=f(key, m).
    🔗:消息认证码
    在这里插入图片描述

    2. HMAC

    基于Hush算法改进的MAC。
    🔗 :密钥散列消息认证码

    优势 :

    1. 基于Hash的方式比普通的方式更快,比如DES
    2. HMAC的代码可用性高
    3. 没有什么类似出口限制

    –密钥管理–

    在简单的分类中,可以将分为短期(自动产生,临时),和 长期(用于认证、保密) 的密钥。

    1. 公开密钥认证

    是用于公开密钥基础建设的电子文件,用来证明公开密钥拥有者的身份。即本质就是对公钥施加数字签名。
    认证机构(CA)用自己的私钥对需要认证的人(或组织机构) 的公钥施加数字签名并生成证书,使得证书与公钥绑定,因此允许在不实时访问公钥权威的情况下进行密钥交换
    【对象】:认证机构 -> 需要认证的人(或组织机构)
    【操作】:施加数字签名和证书
    【效果】:与公钥绑定,足够权限进行密钥交换
    🔗 : 公开密钥认证

    如果A、B是同一机构认证:Trust
    在这里插入图片描述
    如果A、B不是同一机构认证:B要向他的父机构寻求A的父机构认证,Trust
    在这里插入图片描述

    数字签名

    数字签名则是以数学算法或其他方式运算对其加密而形成的电子签章,以此确保数据的完整性和签名者的身份。同时,数字签名具有不可抵赖性(non-repudiation):任何获得数字签名的人都能够将这个签名作为证据。
    有些基于数据的digital signature还需要基于数据或者签名者持有的私密参数进行运算。

    基本原理:私钥加密(相当于生成签名),公钥解密(相当于验证签名)。即将公钥反用,公布public key公钥可以被广泛认证,而在加密的时候用私钥。
    🔗 : 数字签名

    X.509框架

    X.509是密码学里公钥证书的格式标准。目录里包括用户的信息、身份验证协议、由证书颁发机构签名的用户的公钥。证书由权威机构或者用户放入目录,只要拥有该用户公钥就能查看。但是只有CA可以更改证书,任何擅自改动都会被发现。
    表示:CA<< A> >表示由CA签名的A的证书
    过程:A‘s未认证证书 -> 生成未认证证书的Hash码 -> 用CA‘s密钥生成签名 -> 签名证书,可用CA‘s公钥验证
    🔗 : X.509

    吊销

    吊销原因: 1)用户密钥失效,2)CA失效,3)用户不用CA认证了。
    证书吊销列表(CRL):是“已在颁发的证书颁发机构(CA)计划的到期日期之前已被证书颁发机构吊销并且不再受信任的数字证书的列表”。

    CA的层级

    在这里插入图片描述
    每个client 都信任自己的parents。使得CA证书可以通过CA层级的思想获得认证。

    2. Oakley协议

    使用Diffie-Hellman Key Exchange算法思想实现,允许认证过的双方通过不安全的网络交换秘钥的一部分元素。
    Oakley可以再ISAKMP的初始版本里使用。

    3. ISAKMP架构

    它提供了一个架构来进行授权与密钥交换,主要用来密钥交换、在互联网上创建安全关系,被设计为不受约束的钥匙交换
    提供一些类型和格式,使得不同的算法可以被应用在架构中。

    🔗 : ISAKMP


    –网络安全–

    🌟
    Application Layer : S/MIME , Kerberos
    Transport Layer: TLS/SSL
    Internet Layer: IPSec

    1. Kerberos

    前言:
    整个协议是类似一个同学拿着学生卡和密码去图书馆借书的过程,但是这个场景假设的缺陷在于,这个同学需要通过网络把自己的密码发出去,这就存在了大量的隐患。所以,Kerberos的出现,虽然有些麻烦,但是就是为了防止密码输入的步骤。

    过程:
    1)用户把【个人ID,server addr】发送给鉴权服务器(Authentication server),这个服务器就是一个售票员的存在。它把带有身份验证信息和时间戳1的票先用自己的密钥A加密一层,再通过访问数据库的密码库检索出用户的密码,生成密钥B加密一层。
    此时的票有2层加密,一层是为了验证身份,一层是为了后面的提供给时间戳1。此时的票信息包括【个人ID,server addr,时间戳1】。
    在这里插入图片描述

    2)用户此时会被要求输入密码,密码生成密钥B将第一层用密码上的锁解开了。此时用户再请求就是验票服务了,处理的服务器是(Ticket-granting Server)。该服务器作用就是把第一张票换成带有“是否准入信息”的票,并且换上一个时间戳2。做完这些,该服务器再用与应用服务器共享的密钥C加密。此时票的信息包括【个人ID,server addr,时间戳2】,和一层用密钥C加密的锁。
    在这里插入图片描述

    3)用户收到其实并不能做什么,而是直接传给应用服务器(Server),也就是提供服务的服务器。该服务器用密钥C揭开最后一层锁,终于得检查时间戳2,如果一切都正确,那么该同学就可以进去啦。
    在这里插入图片描述

    Kerberos的优点总结与陈述:
    在这里插入图片描述

    2. IPsec (互联网安全协议)

    是一个协议包,透过对IP协议的分组进行加密和认证来保护IP协议的网络传输协议族(一些相互关联的协议的集合)。
    🔗 : 互联网安全协议

    优点

    •与防火墙或路由器相结合
    •因为IP必被使用,防火墙是唯一访问入口,防火墙中的IPSec将无法被绕过。
    •IPSec在传输层(TCP, UDP)之下,对应用程序是透明的。
    •IPSec对终端用户是透明的。

    组成:ESP 和 AH

    • 认证头(AH, Authentication Header)
      无连接数据完整性、消息认证、防重放攻击保护
      在这里插入图片描述
    • 封装安全载荷(ESP, Encapsulate Security Payload)
      提供机密性、认证
      在这里插入图片描述
      🌟两种模式 :
      1)tunnel mode : protect entire packet. 全局模式
      2)transport mode : protect payload 局部模式
      在这里插入图片描述

    Security Association (安全关联)

    在这里插入图片描述
    单向传输,呈现收、发者的关系。
    收到发,发到收,two-way exchange。

    Anti-Apply (防重放)

    是IPsec的一个子协议。它的主要目的是避免黑客注入或篡改从源到目的地的网络数据包。

    • 目的地则以“滑动窗口”维护有效接收分组的序列号记录,它将拒绝所有所含序列号低于滑动窗口中最小值或者序列号已于滑动窗口中出现的数据包。
    • 如果滑动窗口已满则将最小的序列号移出窗口。

    在这里插入图片描述

    3. FireWall (防火墙)

    4种方法:
    1. Packet Filtering(包过滤)
    拒绝未经授权的TCP/IP报文或连接请求。
    在transport/ internet/ network层。

    2. Application-Level Gateway (应用层网关)
    充当应用程序级通信的中继。
    在Application层。

    3. Circuit-Level Gateway (电路层网关)
    转换内部主机的地址,以隐藏外部世界。
    依靠电路设计。

    4. Proxy Service (代理服务)
    Bastion Host。代表内部主机来完全隔离内部形式的外部主机。
    硬件代理。

    缺点:
    1- 不能防止被绕过
    2- 不能防止被攻破
    3- 不能防止计算机病毒


    4. TLS (Transport Layer Security)

    -TLS 在TCP上运行.
    -由Secure Socket Layer (SSL)派生

    TLS Connection 和 TLS Session

    TLS Connection :
    is a transport that provide suitable type of service (p2p).

    TLS Session :
    is an association between a client and a server.

    TLS Handshake Protocol

    握手协议就是在TLS通道创建之前,两个实体达成沟通同意的过程。
    在这里插入图片描述
    1)Client request
    内容包含【session ID , 伪随机码 rc ,用户支持的加密算法list(cipher suit list) 】

    2) Server response
    内容包含【session ID , 伪随机码 rs ,选中的加密算法 , server的公钥认证副本 … 】

    3) Pre-Master secrest transfer
    用一种方法(Diffie-Hellman或者RSA)生成各自密钥。

    4) Client Finished
    客户用MAC检查消息完整性

    5) Server Finished
    服务器用MAC检查消息完整性

    TLS Record Protocol

    保证数据的——
    1)机密性
    2)完整性
    通过分段、压缩、添加MAC、编码、【添加TLS Record Header】在最前面,可以达到以上目的。
    在这里插入图片描述

    TLS Alert Protocol

    用于向对等实体传递与TLS相关的警报。
    第一字节:Alert / Fatal
    第二子节:错误代码
    🔗 : Alert Protocol

    TLS Heartbeat Protocol

    周期性产生的信号,告诉别人运行正常和同步情况。(still alive)
    防止防火墙关闭这类情况,没办法容忍信道空闲的情况发生。


    5. PGP

    🔗 : PGP

    • 4种key :
      pass-phrase key
      session key
      private key
      public key

    • 2种key ring:
      private-key ring : 存储自己的private/public key
      public-key ring : 存储已知的别人的private/public key

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


    6. S/MIME

    是一种Internet标准,它在安全方面对MIME协议进行了扩展,可以将MIME实体(比如数字签名和加密信息等)封装成安全对象,为电子邮件应用增添了消息真实性、完整性和保密性服务。
    🔗 : S/MIME

    7. RFC5322

    定义了电子邮件发件的格式。
    包括header line(header) 和 unrestricted line(the body)

    8. 可能的威胁

    病毒 Virus
    执行时,试图复制自己到其他可执行代码;当它成功时,就说代码被感染了。当受感染的代码执行时,病毒也会执行。

    蠕虫 Worm
    一种能独立运行的计算机程序,它能把自己的完整工作版本传播到网络上的其他主机上。

    特洛伊木马 Trojan horse
    一种计算机程序看起来有有用的功能,但同时也有隐藏的、潜在的恶意功能,可以逃避安全机制,有时利用调用木马程序的系统实体的合法授权。

    后门 Backdoor
    任何绕过正常安全检查的机制,可能允许未经授权的访问功能。

    在这里插入图片描述

    展开全文
  • 随着电子信息技术的发展,非接触式智能卡(如RFID卡)已经在我们的生活中随处可见。与传统的接触式卡、磁卡相比,利用射频...在软件系统实现方面,提出了一系列安全协议,如:Hash锁、随机Hash锁Hash链以及改进的随机
  • 随着电子信息技术的发展,非接触式智能卡(如RFID卡)已经在我们的生活中随处可见。与传统的接触式卡、磁卡相比,利用射频...在软件系统实现方面,提出了一系列安全协议,如:Hash锁、随机Hash锁Hash链以及改进的随机
  • 文章目录MD5 算法# 特点# MD5 用途# 安全性# 简单 JAVA 示例# 为 MD5 添加 salt 示例SHA 算法# JAVA 示例概念:对称加密算法DES 算法# 一般结构图## 初始置换(initial permulation)和终止置换(final permulation...
  • 3.网络安全协议分层 (1)2021年上半年软考上午真题7 (2)2021年上半年软考上午真题11 二、常见计算机网络知识 1.封锁协议 2.OSI七层模型 3.TCP/IP协议簇四层模型 4.常见协议功能 (1)2021年下半年软考...
  • 安全算法摘要证书

    2022-04-08 14:12:37
    安全技术领域的基本概念(算法、密码等) 数字摘要 通过某种算法在发送发和接收方计算两次,如果摘要一样就认为消息是对的。 算法并不需要什么参数,而是想给某个数字的求余函数一样。 Hash碰撞问题 即两个...
  • 浅谈常见的七种加密算法及实现

    千次阅读 2021-02-22 18:00:07
    数字签名、信息加密是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的签名加密算法来达到业务目标...
  • 密码算法分类 (学习笔记)

    千次阅读 2020-06-30 14:40:20
    指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个...
  • 但严格来说,Lockstep并不应该翻译成帧同步,而是——步同步算法。(LockStep由军事语境引入,用来表示齐步行军,队伍中的所有人都执行一致的动作步伐)首次引入计算机领域[4], 作用 应该是用于计算机容错系统,...
  • 计算机常用算法对照表整理

    千次阅读 2017-07-26 10:58:01
    中文名称条件随机场算法,外文名称conditional random field algorithm,是一种数学算法,是2001年提出的,基于遵循马尔可夫性的概率图模型。 全部对照第一部分、计算机算法常用术语中英对照 Data Structures 基本...
  • 为什么HTTPS比HTTP更安全?

    万次阅读 多人点赞 2019-08-09 14:39:34
    HTTPS在浏览器显示绿色安全锁,HTTP没有显示; 六、为何不所有的网站都使用HTTPS 既然HTTPS那么安全可靠,那为何不所有的Web网站都使用HTTPS? 首先,很多人还是会觉得HTTPS实施有门槛,这个门槛在于需要...
  • 加密算法应用之密码保护

    千次阅读 2019-05-10 14:44:29
    目前,各企、事业单位和国家机关纷纷建立了自己的信息系统,并且各信息系统的规模在不断扩大,地位和作用也越来越突出,安全问题也就逐渐被人们所重视。人们关注较多的是网络传输的数据安全,而系统后台服务器存放的用户...
  • 变色龙哈希函数Chameleon Hash Functions一、哈希函数1.1 哈希函数定义1.2 哈希函数性质1.3 哈希函数存在的问题二、 变色龙哈希函数2.1 变色龙哈希函数定义2.2 变色龙哈希函数算法2.3 变色龙哈希安全需求2.4 变色龙...
  • 三分钟带你详解SSL认证与加密技术

    千次阅读 2021-08-23 00:09:45
    很多在线业务(如在网站购物)最重要的一个步骤是创建一个高度安全的交易系统,这样客户就可以放心地把钱转过去,SSL和TLS可以实现这个目的。 SSL/TLS = X.509 证书(一种数字文档,将网站和公司的实体信息绑定到...
  • HASH分区,根据用户自定义的表达式的返回值 返回值不为负(PARTITION BY HASH (expr) 将数据均匀分布还可按LINEAR HASH分区区别在于算法不同)。hash分区的目的是将数据均匀的分布到预先定义的各个分区中,保证各分区...
  • 数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法 来达到业务...
  • 本章讲述了密码学的基本概念以及常见的密码体制、密码算法,分析了杂凑函数、数字签名、国产密码算法安全协议等的工作原理;本章还分析了密码在网络安全方面的应用场景类型。 3.1密码学概况 密码技术是保障网络与...
  • 最终一致性 数据结构与算法 冒泡排序 选择排序 快速排序 递归 二分查找 一致性Hash算法 概述 一致性Hash算法原理 Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,...
  • 文章目录一、对称加密算法二、非对称加密算法1、RSA算法1.1、双向加解密的各自用途1.2、可逆与不可逆1.3、RSA秘钥长度三、数字签名四、CA1、为什么需要CA2、如何从CA获取A的证书3、安装证书四、消失的U盾五、参考...
  • 信息安全考试大纲分析

    千次阅读 2021-10-09 20:00:46
    信息安全考试大纲分析 注:本文适用于某校考研,参照信安大纲编写, 内容参考至《信息安全概论(第3版)》牛少彰 (一)信息安全基础 1.信息安全概述 信息安全:所谓信息安全就是关注信息本身的安全,而不管是否...
  • • 物联网感知层信息安全问题是物联网安全的核心内容 • 物联网感知层面临的安全威胁主要表现为 感知层中节点自身故障(如节点被捕获、被控制、功能失效或服务中断、 身份伪造等) 节点间的链接关系不正常(如...
  • Chameleon Hash Functions

    2020-09-15 16:43:42
    Chameleon Hash Functions(变色龙哈希) ​ 文章目录Chameleon Hash Functions(变色龙哈希)前言一、变色龙Has是什么?二、变色龙散列基于无爪陷门排列三、 基于离散对数的变色龙哈希四、数字签名五、Github源码 ...
  • 说说你知道的几种HASH算法,简单的也可以 Mybatis的底层实现原理。 如何做限流策略,令牌桶和漏斗算法的使用场景。 高并发下,如何做到安全的修改同一行数据。 HR面 请介绍一下你自己 为啥离职? 今后的职业规划? ...
  • RFID标签的安全机制——LCAP协议的C++代码实现

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,315
精华内容 3,326
关键字:

hash算法安全电子锁