作为一名优秀的新时代农民工,加密解密、编码算法自然逃不了。为了更安全、更隐蔽 数字签名,信息加密在开发过程中一定少不了,例如用户密码、关键消息等等,所以密码学至关重要。
作为爬虫工程师,逆向工程师见到目标的加密后的结果,而又无法有效的获取与定位到关键函数。那岂不是抓瞎,那么如果对于常见的加密、编码算法算法有足够的了解,那么是可以便捷很多,例如
- 根据特征结果,直接Hook对应函数。通常有奇效
- 根据特征结果,与所知的参数进行尝试碰撞。也可大幅度减少分析时间
等等,书到用时方恨少,知识与见识自然也是。
0x01 概述
结合爬虫来看,对于密码学,加密与解密掌握自然的越精通越好,同时这又是一陡峭的过程。相较于与密码学相关知识结合爬虫来看并不一定要成为“密码学专家”,但确实拥有足够的了解
将对于我们在逆向、防护方面有不错的帮助。就爬虫来说其中包含但不限于进制、摘要、非对称加密、对称加密等。
0x02 加密与解密
加密,是以某种特殊的算法改变原有的信息数据
解密,加密的逆过程,常为加密等逆处理。
具体实现有编码算法,摘要算法、对称加密、非对称加密等。当然这之间可以一次或多次、一个或多个过程使用
0x03 编码算法
编码是信息从一种形式或格式转换为另一种形式的过程。根据映射关系实现转换。
常见的算法有Base16、Base32、Base64
0x04 摘要算法
消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据理论
上无法被解密,目前可以被解密逆向的只有CRC32算法,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密钥的管理与分发问题,较为适合于分布式网络上使用。由于其加密计算的工作量相当可观,这种算法通常只用于数据量有限的情况下的加密,
消息摘要算法主要应用在“数字签名”领域,作为对明文的摘要算法。著名的摘要算法有MD5算法和SHA-1算法及其大量的变体。
MD5:
默认key:01234567890abdcdef
变体:md2、md4、md5、hmac(带密码的md5)
种类:16位 32位 40位
SHA-1:
sha1 40位
sha256 64位
sha512 128位
特点
消息摘要是把任意长度的输入揉和而产生长度固定的伪随机输入的算法。消息摘要的主要特点有:
1.
无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出,SHA-1的变体可以产生192比特位和256比特位的消息摘要。一般认为,摘要的最终输出越长,该摘要算法就越安全。
2.
消息摘要看起来是“随机的”。这些比特看上去是胡乱的杂凑在一起的。可以用大量的输入来检验其输出是否相同,一般,不同的输入会有不同的输出,而且输出的摘要消息可以通过随机性检验。但是,一个摘要并不是真正随机的,因为用相同的算法对相同的消息求两次摘要,其结果必然相同;而若是真正随机的,则无论如何都是无法重现的。因此消息摘要是“伪随机的”。
- 一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。这正是好的消息摘要算法所具有的性质:输入改变了,输出也就改变了;两条相似的消息的摘要确不相近,甚至会大相径庭。
4.
消息摘要函数是无陷门的单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚至根本就找不到任何与原信息相关的信息。当然,可以采用强力攻击的方法,即尝试每一个可能的信息,计算其摘要,看看是否与已有的摘要相同,如果这样做,最终肯定会恢复出摘要的消息。但实际上,要得到的信息可能是无穷个消息之一,所以这种强力攻击几乎是无效的。
- 好的摘要算法,没有人能从中找到“碰撞”,虽然“碰撞”是肯定存在的。即对于给定的一个摘要,不可能找到一条信息使其摘要正好是给定的。或者说,无法找到两条消息,使它们的摘要相同。
0x05加密
加密一般分为对称式加密以及非对称式加密两类。采用的比较广泛的是对称式加密,主要特点是加密和解密使用同一个密钥。
而非对称式加密在进行加密时则使用了两个密钥,加密和解密过程中分别使用不同的密钥,这两个密钥分别为“公钥”以及“私钥”,想要能正常完成加密解密过程,就必需配对使用,而在使用过程中,“公钥”是公开的,“私钥”则必须由发送人保密,同时只能由持有人所有。
对称加密
需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。
所谓对称,就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密。密钥是控制加密及解密过程的指令。算法是一组规则,规定如何进行加密和解密。
因此加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要
。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
采用单钥密码的加密方法,同一个密钥可以同时用来加密和解密,这种加密方法称为对称加密,也称为单密钥加密。常用的单向加密算法:
1、DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
2、3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;
3、AES(Advanced Encryption
Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高,支持128、192、256、512位密钥的加密;
4、Blowfish
算法特征
1、加密方和解密方使用同一个密钥;
2、加密解密的速度比较快,适合数据比较长时的使用;
3、密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦;
非对称加密
非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public
key,简称公钥)和私有密钥(private key,简称私钥)。
- RSA:RSA 是一种目前应用非常广泛、历史也比较悠久的非对称秘钥加密技术,在1977年被麻省理工学院的罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard
Adleman)三位科学家提出,由于难于破解,RSA 是目前应用最广泛的数字加密和签名技术,比如国内的支付宝就是通过RSA算法来进行签名验证。它的安全程度取决于秘钥的长度,目前主流可选秘钥长度为
1024位、2048位、4096位等,理论上秘钥越长越难于破解,按照维基百科上的说法,小于等于256位的秘钥,在一台个人电脑上花几个小时就能被破解,512位的秘钥和768位的秘钥也分别在1999年和2009年被成功破解,虽然目前还没有公开资料证实有人能够成功破解1024位的秘钥,但显然距离这个节点也并不遥远,所以目前业界推荐使用
2048 位或以上的秘钥,不过目前看 2048 位的秘钥已经足够安全了,支付宝的官方文档上推荐也是2048位,当然更长的秘钥更安全,但也意味着会产生更大的性能开销。 - DSA:既 Digital Signature Algorithm,数字签名算法,他是由美国国家标准与技术研究所(NIST)与1991年提出。和 RSA 不同的是 DSA
仅能用于数字签名,不能进行数据加密解密,其安全性和RSA相当,但其性能要比RSA快。 - ECDSA:Elliptic Curve Digital Signature Algorithm,椭圆曲线签名算法,是ECC(Elliptic curve cryptography,椭圆曲线密码学)和 DSA
的结合,椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的,相比于RSA算法,ECC
可以使用更小的秘钥,更高的效率,提供更高的安全保障,据称256位的ECC秘钥的安全性等同于3072位的RSA秘钥,和普通DSA相比,ECDSA在计算秘钥的过程中,部分因子使用了椭圆曲线算法。
加密小结
对称加密只需要获取到公钥即可,进行解密
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
小结
简单来说加密与解密就阐述了密码学基本特征,非专业的了解。可大致了解编码、摘要、对称加密、非对称加密即可。后有兴趣可深入