1.起源
軍事領(lǐng)域 運(yùn)用最廣
對數(shù)據(jù)加密進(jìn)行保護(hù)
凱瑟大帝 --凱瑟密碼本
一直持續(xù)用到上世紀(jì)70年代 二戰(zhàn)
美日對戰(zhàn) 美軍幾乎截獲所有日軍電報(bào)
AF 中途島 殲滅日軍所有海軍力量
明文--密文
A--a
B--b
類似
base64
RSA 的出現(xiàn)結(jié)束了密碼本的時(shí)代
RSA公鑰加密算法是1977年由羅納德·李維斯特(Ron Rivest)悉默、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的宙彪。1987年7月首次在美國公布本缠,當(dāng)時(shí)他們?nèi)硕荚诼槭±砉W(xué)院工作實(shí)習(xí)。RSA就是他們?nèi)诵帐祥_頭字母拼在一起組成的。
RSA算法是一種非對稱密碼算法,所謂非對稱,就是指該算法需要一對密鑰伙判,使用其中一個(gè)加密,則需要用另一個(gè)才能解密黑忱。
破解方法:因式分解
哈希(散列)函數(shù) 取摘要
- MD5
- SHA1/256/512 強(qiáng)度
- HMAC(很多大企業(yè)在用Q绺А!) 非常安全
對稱加密
- DES(數(shù)據(jù)加密標(biāo)準(zhǔn)杨何,目前用的少)
- 3DES()
- AES(高級(jí)密碼標(biāo)準(zhǔn)酱塔,美國國家安全局使用) 蘋果的鑰匙串訪問就是用的AES
散列函數(shù)特點(diǎn)
- 算法公開的
- 對相同的數(shù)據(jù)加密沥邻,得到的結(jié)果是一樣的危虱,算法一樣
- 對不同的數(shù)據(jù)加密,得到的結(jié)果是定長的(MD5加密得到32個(gè)字符)
- 不能反算(不可逆)
- 信息摘要唐全,信息“指紋” 備案
- 散列碰撞 -- 王小云
數(shù)據(jù)完全的原則
用戶的習(xí)慣 密碼一樣的 QQ 微信 ……
1.在網(wǎng)絡(luò)上不允許“明文”傳遞用戶隱私信息
2.在本地上不允許“明文”保存用戶隱私信息
實(shí)際開發(fā)時(shí)埃跷,哈希蕊玷,對稱,非對稱 是結(jié)合使用的
用途
- 密碼
導(dǎo)入一個(gè)純swift寫的MD5加密文件
為了保持客戶端與服務(wù)器一致弥雹,現(xiàn)在有兩個(gè)做法1.服務(wù)器和客戶端一樣的加密 2.更加暴力的直接是32位的哈希值
在真實(shí)的開發(fā)中垃帅,服務(wù)器保存的是哈希值,因?yàn)榉?wù)器也不能保存用戶的明文信息的規(guī)定剪勿。
以前賬號(hào)有找回密碼,而現(xiàn)在只有重置密碼贸诚,這是因?yàn)榉?wù)器也不知道密碼是什么,因?yàn)楣J?strong>不可逆的厕吉。
注冊的時(shí)候保存的密碼哈希值
這樣的加密方式你認(rèn)為安全了嗎酱固,1.不能反算 2.服務(wù)器都不知道密碼。
現(xiàn)在隆重的介紹一個(gè)CMD5
123456:e10adc3949ba59abbe56e057f20f883e
456789:e35cf7b66449df565f93c607d5a81d09
……
這個(gè)網(wǎng)站比較2的把一些可能出現(xiàn)的詞保存起來头朱,類似密碼本运悲。
所以現(xiàn)在看來 直接MD5加密是不行的,不安全的项钮。直接用sha1,sha256,sha512都是不行的
- 1.直接MD5 ---不夠安全班眯, 可以查詢
- 2.加鹽 -- (密碼 + 鹽).md5 早起的方案
//鹽 要足夠長
let salt = "aodfaod({sdf$%U@})fuadjfoefkjwefiy937ru4i12uh4r98y4rn#$dkfsf"
let str = password.appending(salt).md5String
很多人這么干
這樣我們感覺已經(jīng)很安全了 但
我們的鹽是死的,一旦泄露就完蛋了 程序里面的代碼你最清楚烁巫。
不漲工資就可以拍桌子了
比方說100萬推廣引進(jìn)20萬用戶署隘,一旦鹽泄露,用戶的信息就不安全程拭,這時(shí)就要強(qiáng)制升級(jí)定踱。用戶就會(huì)損失,100萬打水漂了
- 3.HMAC -- 最近幾年恃鞋,國內(nèi)開始慢慢增多
HMAC是密鑰相關(guān)的哈希運(yùn)算消息認(rèn)證碼(Hash-based Message Authentication Code),HMAC運(yùn)算利用哈希算法崖媚,以一個(gè)密鑰和一個(gè)消息為輸入,生成一個(gè)消息摘要作為輸出恤浪。
HMAC 的用途
HMAC 算法主要應(yīng)用于身份驗(yàn)證畅哑,用法如下:
隨機(jī)數(shù)在注冊時(shí)只保存一次
- 1.客戶端發(fā)出登錄請求
- 2.服務(wù)器返回一個(gè)隨機(jī)值,在會(huì)話記錄中保存這個(gè)隨機(jī)值水由,這時(shí)客戶端將永久保存這個(gè)隨機(jī)數(shù)
- 3.客戶端將該隨機(jī)值作為密鑰荠呐,用戶密碼進(jìn)行 hmac 運(yùn)算,遞交給服務(wù)器
- 4.服務(wù)器讀取數(shù)據(jù)庫中的用戶密碼砂客,利用密鑰做和客戶端一樣的 hmac運(yùn)算泥张,然后與用戶發(fā)送的結(jié)果比較,如果一致鞠值,則用戶身份合法媚创。
這么做有什么好處呢? 如果我們在登錄的過程中彤恶,黑客截獲了我們發(fā)送的數(shù)據(jù)钞钙,他也只能得到 hmac 加密過后的結(jié)果鳄橘,由于不知道密鑰,根本不可能獲取到用戶密碼芒炼,從而保證了安全性瘫怜。
現(xiàn)在有一個(gè)問題,我們卸載APP 更換手機(jī)等等本刽,沒有了隨機(jī)數(shù)我們要怎么登錄鲸湃?
- 1.我們的登錄都不是一次請求,沒有key 就找服務(wù)器要子寓。服務(wù)器給你
這個(gè)key是定期更換的唤锉,當(dāng)你長時(shí)間不登錄會(huì)提示更換密碼
- 當(dāng)客戶端沒有key時(shí),向服務(wù)器要key别瞭,服務(wù)器不給窿祥,詢問授權(quán)手機(jī)或者常用手機(jī)是否允許新手機(jī)登錄。
例如:QQ蝙寨,微信晒衩。 他們不一定用的就是HMAC,但HMAC一定能實(shí)現(xiàn)這樣的功能
- 當(dāng)客戶端沒有key時(shí),向服務(wù)器要key别瞭,服務(wù)器不給窿祥,詢問授權(quán)手機(jī)或者常用手機(jī)是否允許新手機(jī)登錄。
現(xiàn)在我們的密碼已經(jīng)足夠安全了,已經(jīng)想不到怎么破解了墙歪。但是我們進(jìn)入了一個(gè)死胡同里听系,我們要加密的不單單只有密碼,還有數(shù)據(jù)虹菲。不管你怎么加密你都是向服務(wù)器發(fā)送那32位字符串靠胜,我為什么要破解你的密碼。盜號(hào)什么的 就是 模擬登陸毕源。群發(fā)消息浪漠,哥們最近手頭有點(diǎn)緊,給充10元話費(fèi)霎褐,只要量大址愿,一天萬八的沒有問題。
服務(wù)器保存了賬號(hào)的賬號(hào)冻璃,HMAC密碼响谓,key
這時(shí)我們就不能直接發(fā)送HMAC密碼了,要發(fā)送:(HMAC密碼 +“201710171111”).MD5 “201710171111”客戶端時(shí)間
以前服務(wù)器是對比HMAC密碼省艳,
現(xiàn)在服務(wù)器要對比兩次
- HMAC密碼 +“201710171112”).MD5 “201710171112”服務(wù)器的時(shí)間 這次對比一定是失敗的 時(shí)間不對
2.(HMAC密碼 +“201710171111”).MD5 “201710171111” 減一分鐘
不要用本地時(shí)間 找服務(wù)器要
密碼有時(shí)間限制的最長也就2分鐘所以才是兩次娘纷。登錄超過2分鐘提示密碼錯(cuò)誤!跋炕!赖晶,你想讓用戶登錄時(shí)看小菊花2分鐘,然后提示一個(gè)密碼錯(cuò)誤枣购?嬉探?別開玩笑了,登錄超過20秒用戶都會(huì)任務(wù)APP死掉了棉圈, APP不行涩堤。尤其是蘋果手機(jī)的用戶。
Android與iOS開發(fā)者最大的不同就是分瘾,Android的開發(fā)者寫的不好沒有關(guān)系胎围,用戶只會(huì)說破手機(jī)。 iOS用戶就會(huì)說破APP德召。
注意 請求時(shí)間不要超過6秒白魂,超過了也不要提示我們自己的原因,就說上岗,你的網(wǎng)絡(luò)環(huán)境不好福荸,請換個(gè)寬廣的地方試一試。
這樣就做到 每次加密的結(jié)果都不一樣肴掷,這就需要黑客必須在2分鐘內(nèi)搞定
安全沒有絕對敬锐,只有相對安全。
怎么估算相對安全:破解所得到的價(jià)值是否大于破解所需要的成本
大于就是不安全
問:指紋能做登錄密碼嗎呆瞻?指紋能否代替密碼台夺?
答:不可以。密碼:能確定你是這個(gè)賬號(hào)的主人痴脾。指紋:能確定你是這個(gè)手機(jī)的主人