Encryption algorithm summary

对称与不对称,可逆与不可逆

Posted by minicool on March 26, 2015

在一般通过公开算法将原始信息进行编码称为:编码,摘要,加解密 1.编码 公开编解码算法,对数据进行编码。例如bas64,zip,flac. 一般目的对数字文件进行压缩,并保证无损。(也有有损编码)

加密算法

根据密钥类型不同可以将现代密码技术分为两类:对称加密算法(私钥密码体系)和非对称加密算法(公钥密码体系)。

对称加密与非对称加密算法比较

1.对称加密相对资源消耗较少,加解密速度快。

不可逆算法

主要特征: 单向性 抗冲突性

主要应用: 数字指纹 密码加密

不可逆算法通常是指通过散列计算的算法,因其英文名称HASH被英译名为“哈希”。通过散列计算的方法称为“哈希函数”。 散列计算是指不论输入计算长度杜少,最后通过计算方法生成相同的输出长度。

散列算法包括:MD4,MD5,SHA1,SHA2,SHA256,PBKDF2,bcrypt,scrypt等。 因散列函数特殊性,通常在抗碰撞性上弱,为弥补其缺失。一般通过增加算法迭代,延长算法计算时间,增加算力,等效来增加破解所需算法时间,以其来加大破解投入成本,增加破解安全性。 而通过这种方式发展以,MD5,SHA256为代表的快算,PBKDF2,bcrypt为代表的慢散列。 PBKDF(Password-Based Key Derivation Funcation 给予口令的密钥函数),输出结果为DK(deviced key)

主要围绕:口令密码,算力成本

快函数优缺点

慢函数优缺点

1.【放置服务器】消耗算力资源,如果放置服务器计算,大量用户连接会导致速度下降。 2.【放置前端】应为计算时间,可以有效防止使用彩虹表爆库。 应为用户端资源较为闲置,使用前端使用慢函数加密。 (1)如果前端被破解,获取算法。但应为算力成本问题,进行暴力破解时间成本高。(类似POW) (2)目的通过输入口令获取秘钥。输出结果为DK. 3.Zero-knowlege proof (零知识证明) 证明者在不透露任何有用信息情况下,使验证者相信某个论断是正确的。 通过前端运算,发送后端比较,可以证明用户输入的是正确信息。而不需要存储在后端数据库。

应用场景

一般通过前后端算法结合。 1.前端 使用慢散列, 增加算力成本, 2.后段 使用快散列, 防止Dk泄漏。 新函数:f(key) = server_hash(client_hash(key) + salt) key = 密码+用户名(用户名作为salt)

1.应为放入后台的是DK,可以有效防止脱库。(需要破解前段,加密,就算获取仍然可以阻止生成特定字典)

为弥补用户密码的弱属性,一般会使用添加salt,即英意译名“加盐”。 salt的使用 1.增加抗冲突性,通常通过随机字符串生成库,生成散列用户密码长度。(存储不方便,为避免脱裤,一般分开存储,增加脱裤难度) 2.通过数据库固定字段,生成salt字段。降低抗冲突性。(无需存储,基于固定数据生成,减少撞库难度) 3.通过验证传输salt值,形成所需生成新值。完全避免重放攻击。(对于数据传输要求较强,增加前段,后段算力资源)

对抗预算 (彩虹表)

彩虹表是一个用于加密散列函数 逆运算的预先表。主要用于破解密码的散列值准备。这个是典型的内存换时间处理方式。 通常彩虹表会收集现在常用用户名和密码进行生成,用于穷聚暴力破解。为了减少查询,一般使用小部分哈希值,生成对应可逆向的密码长链(多个密码)

salt (加盐)

防止DK泄漏

DK生命周期

浏览器-》传输-》服务器-》数据库

DK泄漏一般:网络传输被窃听。 Dk无意义长链,所以获取无法获取到口令。(可以保证不会通过口令,导致其他账户被盗窃)

一般浏览器应用,直接使用密码管理插件,用户口令不再向后端发送,而只发送DK。就算最悲观,(服务器中毒,传输窃听,后段存储) 也只是导致当前账号不可用,不会导致其他账号被破解。

如果遗忘密码,直接让用户生成新密码。 遗忘密码验证,增加手机绑定,用户信息验证等。

WEb应用

旧有内置前段KDF计算网站不多,在IE时代,浏览器算力低下,导致前段计算意义不大,都由后段计算观念造成的。 现有浏览器性能大幅提升,HTML5引入了WEBcrypto规范。JS直接调用浏览器内置密码学算法库,包含PBKDF2.应为原生性能非常高。 作为口令哈希函数,只是套用了现有哈希函数,并未针对进行设计。新性argon2应为太新,为进行验证。尚未收录WEBcrypto中。