iOS散列和加密算法

iOS散列和加密算法

安全性对于一个app来说是极为重要的,比如说当一个app服务端使用明文进行密码存储的时候,一旦用户密码泄露,对于用户来说影响是极其大的,可能用户的这个密码在前提的平台也在使用。所以在开发中我们需要对一些重要的信息比如用户隐私进行加密。

总的来说,在安全性上,我们可以从几个方面入手:

  1. app代码层面上的安全。
    • 比如说代码混淆,代码加密或者加壳,增加被逆向的难度。
  2. 网络传输前后的安全
    • 尽量使用https而不是http。
    • 无论是get还是post请求,可以理解为都是在明文传输。所以请求和响应都可以进行加密和签名处理。
  3. 数据存储的安全。
    • 密码或者其他重要信息不要在服务端或者app内明文存储,而应该是使用这些信息的哈希值或者加密哈希值后再进行存储。

几种常见的散列和加密算法

一. 哈希(散列)算法

  • 散列就是对数据信息的摘要,提炼。
  • 散列结果不可逆,这保证了无法通过散列的结果推导出原文。
  • 无论是什么数据,散列后的结果长度是一样的,比如MD5运算后得到的都是128bit。
  • 对于相同的数据散列后的结果是一样的,这保证了“唯一性”。
  • 对于不同的数据散列后的结果是不同的。存在相同的可能性,但概率不大,因为数据是有无限的,而散列结果长度是固定的,这样导致肯定会存在不同数据对应同样散列结果的可能,但基本可以忽略不计。
  • 数据随便一点点的改动,散列的结果变化会很大。

所以散列可以用来做数据签名,或者说唯一性的标识。

  1. MD5
    Message Digest Algorithm MD5(中文名为消息摘要算法第五版)
    输出:128bit。
    因为MD5已经被破解,所以不再推荐在重要场合使用。而且已经存在对MD5进行穷举的网站

加盐:就是在原信息的基础上,加入一段字符串,再进行散列运算。
这样的做法,可以在原来简单MD5的基础上,加大一些被穷举出原文的难度。所以相对直接MD5,安全性会稍微高一点点。
但是也会存在问题,一旦盐泄漏,也就是加入的那段字符串泄漏,穷举出来的可能性就会变大。
苹果本身也不推荐我们再使用md5了,推荐我们去使用SHA256或者强度更高的。

image.png

  1. SHA1/256/512
    SHA1: 安全哈希算法(Secure Hash Algorithm)
    输出: 160bit
    SHA256:
    输出:256bit
    SHA512:
    输出:512bit
  2. HMac
    HMac和MD5非常相似的,只不过在MD5的基础上,多了盐。
    可以理解成:本来加盐md5(message + salt)这个操作盐是固定写死在本地的,而HMAC中salt是动态从服务端获取的,然后再进行两次散列。这样黑客就不容易猜出salt,也增加了破解原文的难度。

Hmac算法针对所有哈希算法都通用,无论是MD5还是SHA-1。采用HMAC替代我们自己的salt算法,可以使程序算法更标准化,也更安全。

用途:

  • 消息摘要
    有些地方是不能进行明文存储的,比如用户密码等,这时候就可以使用密码的哈希值或者加密哈希值后再去进行存储。
  • 数字签名
    比如在在通信请求中,我们对请求和响应数据进行散列得到散列信息,然后使用RSA进行散列信息的加密。因为秘钥只有服务端有,服务端拿到RSA加密的散列信息后验签,就能知道数据是否完整,有没有被篡改过等等。
  • 查找
    因为哈希的“唯一性”,所以可以拿来当做数据的身份证,指纹。比如通过直接对比两个文件的哈希值,就可以知道这两个文件是不是同一个文件。
  • 版权
    也是因为“唯一性”,比如你发布了个视频或者文章,别人拿了你的视频文章也去发布,这里就会有盗版的问题,怎么区分正版,就是通过哈希,你先发布的,所以系统会记录你之前发布的视频哈希值,一比较如果两哈希值一样,说明后者存在盗版的问题。

二. 对称加密

对称加密只有一个秘钥,明文通过秘钥加密获得密文;密文通过秘钥解密获得明文。
1. DES
数据加密标准,现在用的很少了,加密强度不够。
2. 3DES
使用3个秘钥,对数据进行3次加密,强度增加了,但秘钥的存储难度大大加大了。
3. AES
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
优点:加密解密速度快,适用于数据量大的场景。
缺点:秘钥的传输与存储,一旦秘钥泄漏,加密也就暴露了。
所以一般秘钥用RSA来加密传输。比如iOS中钥匙串的访问就是AES。
AES的话有五种加密模式
1.电码本模式(Electronic Codebook Book (ECB)
2.密码分组链接模式(Cipher Block Chaining (CBC))
3.计算器模式(Counter (CTR))
4.密码反馈模式(Cipher FeedBack (CFB))
5.输出反馈模式(Output FeedBack (OFB))
常用的是:

电话本模式(ECB)
会把数据分成几块,每一块独立加密。
比如说我改了第三块的一点点数据,那么ECB加密模式下,修改前前面两块的加密结果和修改后前面两块的加密结果是一样的。只有第三块因为数据的修改导致加密的不同。

密码分组链接模式(CBC)
同样会把数据分成几块,但每块存在依赖关系,比如第二块的加密依赖于第一块数据,第三块依赖于第二块;
解密也存在依赖关系,第二块解密依赖于第一块数据,第三块依赖于第二块。
这样的做法,保证了数据的完整性,只要一块有问题,那么就说明数据被篡改过。

有一点要注意的是,如果是直接调用系统的库进行非对称加密的话,最好是在函数调用前,做一些自己的加密或者混淆,否则因为是系统的库函数没办法去符号化的,很容易被逆向逮到加密前的参数。

三. 非对称加密

RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密公钥,只要两个质数足够大,破解的可能性就足够小。至少在现阶段是没可能因式分解出来的。所以RSA私钥一般是1024位,在重要场合可能是2048位。
非对称加密,公钥加密,私钥解密,速度相对较慢,适用于数据量小的场景。
比如说支付宝,使用AES对请求和响应内容进行加密,防止内容的泄漏。使用RSA进行加密内容的签名,两端分别加签验签,防止数据的篡改。
RSA具体实现原理可以看一下这个博客:RSA算法原理一RSA算法原理二

最后,这里是一些和加密相关的demo和工具。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 226,728评论 6 526
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 97,623评论 3 411
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 174,371评论 0 372
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,174评论 1 306
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,014评论 6 405
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,532评论 1 319
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,641评论 3 433
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 41,793评论 0 283
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,294评论 1 329
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,276评论 3 352
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,423评论 1 364
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,980评论 5 354
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,678评论 3 342
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,087评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,307评论 1 279
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,997评论 3 385
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,404评论 2 370

推荐阅读更多精彩内容

  • 一、什么是对称加密技术? 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥。信息接收双方都需...
    Djbfifjd阅读 1,980评论 2 8
  • 一、散列(哈希) 1.简介 散列函数,又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散...
    绿叶竹林阅读 3,551评论 3 3
  • 1. Base64编码 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于...
    _imp_阅读 2,991评论 1 10
  • 这篇文章主要讲述在Mobile BI(移动商务智能)开发过程中,在网络通信、数据存储、登录验证这几个方面涉及的加密...
    雨_树阅读 2,524评论 0 6
  • 这里先简单介绍单向散列函数、消息摘要和哈希碰撞的的概念 单向散列函数: 将任意长度的信息转换为较短的固定长度的值,...
    坤_7a1e阅读 3,507评论 0 0