App安全与加密上

作者: ChiCoChiCo | 来源:发表于2018-06-12 20:42 被阅读66次

    加密算法分类

    • 对称加密:加密和解密都是使用一个密钥,密钥的保密工作就非常重要.
    • 非对称加密:用公钥加密,私钥解密; 用私钥加密,公钥解密.

    对称加密

    常见对称加密算法

    1. DES 数据加密标准
    2. 3DES
    3. AES "高级"加密标准
    4. ECB 电子代码本,每个块都是独立加密的
    5. CBC 密码块链:使用一个密钥和一个初始化向量 (IV)对数据执行加密转换,可以有效地保证密文的完整性。

    ECB 终端测试命令

    $ openssl enc -des-ecb -K 616263 -nosalt -in msg1.txt -out msg1.bin //加密
    $ openssl enc -des-ecb -K 616263 -nosalt -in msg1.bin -out msg1.txt -d //解密
    $ xxd msg1.bin // 查看加密之后的二进制文件
    

    CBC终端测试命令

    $ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in a.txt -out msg1.bin //加密
    $ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in msg1.bin -out msg4.txt -d //解密
    $ xxd msg1.bin //查看加密之后的二进制文件
    
    非对称加密算法

    概要

    1.加密解密方法: 用公钥解密然后用私钥解密;或者私钥加密然后用公钥解密
    2.优缺点,优点是安全 缺点是速度慢

    RSA原理

    OpenSSL 终端命令

    openssl genrsa -out private.pem 512 //生成强度是 512 的 RSA 私钥
    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 //使用私钥解密小文件
    openssl rsa -in private.pem -out private.der -outform der //将私钥转换成 DER 格式
    openssl rsa -in public.pem -out public.der -pubin -outform der //将公钥转换成 DER 格式
    

    iOS 相关证书生成命令

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

    安全之签名

    MD5

    Hash 散列函数不可逆的特点,是“加密”的另一种应用,可实现对安全信息的签名验证和标志文件。【不是正真的加密算法】

    RSA

    RSA算法有两个作用一个是加密一个是数字签名
    数字签名
    发送方
    "报文" HASH 得到 "报文摘要"
    "报文摘要" 用公钥加密(数字签名) + 报文
    发送给接收方
    接收方
    "报文" HASH 得到 "报文摘要"
    "数字签名" 用私钥解密 判断是否与 "报文摘要" 相同

    iOS 安全特有功能

    1.手机指纹、密码登录

    1 判断是否有使用指纹或密码验证: - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error attribute((swift_error(none)));
    policy 分为: LAPolicyDeviceOwnerAuthenticationWithBiometrics 和 LAPolicyDeviceOwnerAuthentication, 前者只使用指纹,后者在指纹失败后会弹出密码验正。
    2 请求验证,弹出验证界面 - (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError * error))reply;
    3 验证结果,如果 success 是YES标志验证成功,NO标志不成功。 当验证不成共时,error 有:

    3.1 LAErrorAuthenticationFailed - 指纹无法识别
    3.2 LAErrorUserCancel --用户点击了取消
    3.3 LAErrorUserFallback --用户点击了输入密码
    3.4 LAErrorSystemCancel --系统取消
    3.5 LAErrorPasscodeNotSet --因为你设备上没有设置密码
    3.6 LAErrorTouchIDNotAvailable --设备没有Touch ID
    3.7 LAErrorTouchIDNotEnrolled --因为你的用户没有输入指纹
    3.8 LAErrorTouchIDLockout --多次输入,密码锁定
    3.9 LAErrorAppCancel-- 比如电话进入,用户不可控的

    2.钥匙串:保存安全性很高的小数据,他还具有一次保存,长久保留【删除应用后还存在】的特点

    iOS 中重要的函数

    1.非对称加密函数

    SecKeyEncrypt 使用公钥对数据加密
    SecKeyDecrypt 使用私钥对数据解密
    SecKeyRawVerify 使用公钥对数字签名进行验证
    SecKeyRawSign 使用私钥生成数字签名

    相关文章

      网友评论

        本文标题:App安全与加密上

        本文链接:https://www.haomeiwen.com/subject/cfgreftx.html