全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网

接口文档

更新时间:2017-07-14 14:31:07

1.内容简介

本文档针对iOS安全组件的接口使用进行详细说明,在使用接口前,请先参考安全组件的接入前准备,接入安全组件。

iOS安全组件的主要接口如下表:

组件 说明
安全接口 SecuritySignature 安全签名、白盒签名
安全接口 SecurityCipher 安全加密、白盒加密
安全接口 SecurityStorage 安全存储

安全接口:提供了安全签名、安全加密、安全存储三大类接口。其中,安全签名、安全加密需要使用指定密钥Key。这里的“指定密钥Key”是指,在获取yw_1222_0335.jpg文件时同时获得的“密钥”,如 “4bf1c**81ca”。

在使用安全签名和安全加密时,需要输入key值的位置,只需要填入“4bf1c**81ca”。

1.1 安全签名

安全签名基于HMAC_SHA1算法和指定密钥Key对数据进行加签,在传输数据时,可以利用加签的结果对传输数据进行数据校验。以下图为例,在进行转账时,无签名的正常流程为如图2

1

图2 无签名的数据传输

但如图3,攻击者可以在数据传输时对数据进行劫持,并进行伪造或修改:

2

图3 攻击者进行劫持

此时,如图4,利用签名对数据进行校验,劫持者的伪造信息就可以被识别。

3

图4 增加签名的数据传输

1.2 安全加密

安全加密基于AES128算法和指定密钥Key对输入数据进行加密,加密过程完全在Native层实现,速度更快,较iOS原生加密接口更加安全,相关对比,请参看下表:

项目

iOS原生加密 聚安全安全加密
速度
密钥 存于Objective-C代码中易被破解 加密存储在yw_1222_0335.jpg文件中,使用沙箱保护,不直接暴露在代码中

安全性

不校验包名,调用没有门槛 与应用包名绑定,调用有一定门槛

1.3 安全存储

与安全签名用于校验数据不同,安全存储是对输入数据进行加密然后存储在本地NSUserDefault中,保护用户以及客户端私有数据安全。对于客户的私有数据,如登录密码、用户名等敏感信息,以及客户端访问网络端获取的敏感信息如果直接明文存储在NSUserDefault中,极容易被攻击者利用。使用安全存储,会在写入NSUserDefault前进行加密,提升数据的安全性,避免被攻击者利用。以下图为例,直接存储明文密码易被窃取。

4

图5 明文存储的密码易被窃取

如图6,使用安全存储后,数据在存储前会进行加密,增强数据安全。

5

图6 安全存储进行加密存储

2.安全签名(SecuritySignature类)

2.1 安全签名说明

安全签名用于对输入数据进行加签,进而在方便在server端进行数据校验。

2.2 安全签名接口

  1. + (NSString*) sign: (NSString*) input key: (NSString*) key;

功能:使用密钥key对输入数据进行签名。

参数:input:待加签数据。key:存储于yw_1222_0335.jpg文件中的指定密钥key。

返回值:加签结果

异常:接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头,错误码的详细定义请见2.3。

2.3 错误码

错误码 含义

SEC_ERROR_SIGNATRUE_INVALID_INPUT

601

参数不正确
SEC_ERROR_SIGNATURE_NO_MEM 602 内存分配失败,请重试
SEC_ERROR_SIGNATURE_DATA_FILE_MISMATCH 607 图片文件存在问题。一般情况是生成图片时的bundle id和应用的bundle id不匹配
SEC_ERROR_SIGNATURE_NO_DATA_FILE 608 没有找到图片文件,请确保图片文件在项目目录下
SEC_ERROR_SIGNATURE_INCORRECT_DATA_FILE 609 图片文件格式有问题,请重新生成图片文件,一种常见场景就是二方和三方图片混用。二方和三方的图片不兼容,需要各自生成
SEC_ERROR_SIGNATURE_INCORRECT_DATA_FILE_DATA 610 图片文件内的内容不正确,请重新生成图片文件
SEC_ERROR_SIGNATURE_KEY_NOT_EXSITED 611 参数中的key在图片文件中找不到,请确认图片文件中有这个key
SEC_ERROR_SIGNATURE_ATLAS_KEY_NOT_EXSITED 613 atlas密钥不存在
SEC_ERROR_SIGNATURE_LOW_VERSION_DATA_FILE 615 请升级新版本的图片,当前图片的版本太低
SEC_ERROR_SIGNATRUE_UNKNOWN 699 未知错误,请重试

2.4 示例程序

  1. #import <SecurityGuardSDK/JAQ/SecuritySignature.h>
  2. @implementation SGTestJAQSecuritySignature
  3. - (void) testJAQSecuritySignature
  4. {
  5. NSString* key = @"3b81f8ee-f2ef-4459-8c67-7bd5b75e8263";
  6. NSString* valueToSign = @"valuetosign=test&method=md5";
  7. NSString* result = [SecuritySignature sign: valueToSign key: key];
  8. if (result.length) {
  9. NSLog(@"The signature is : %@", result);
  10. }
  11. }
  12. @end

3.安全加密(SecurityCipher类)

3.1 安全加密说明

安全加密用于对输入数据进行加密。

3.2 安全加密接口

  1. + (NSString*) encryptString: (NSString*) input key: (NSString*) key;

功能:使用指定密钥key对输入数据进行加密。

参数:input:待加密数据。key:存储于yw_1222_0335.jpg文件中的指定密钥key。

返回值:加密结果。

异常:接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头,错误码的详细定义请见3.3。

  1. + (NSData*) encryptBinary: (NSData*) input key: (NSString*) key;

功能:使用指定密钥key对输入数据进行加密。

参数:input:待加密数据。key:存储于yw_1222_0335.jpg文件中的指定密钥key。

返回值:加密结果。

异常:接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头,错误码的详细定义请见3.3。

  1. + (NSString*) decryptString: (NSString*) input key: (NSString*) key;

功能:使用指定密钥key对输入数据进行解密。

参数:input:待解密数据。key:存储于yw_1222_0335.jpg文件中的密钥key。

返回值:解密结果。

异常:接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头,错误码的详细定义请见3.3。

  1. + (NSData*) decryptBinary: (NSData*) input key: (NSString*) key;

功能:使用指定密钥key对输入数据进行解密。

参数:input:待解密数据。key:存储于yw_1222_0335.jpg文件中的密钥key。

返回值:解密结果。

异常:接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头,错误码的详细定义请见3.3。

3.3 错误码

错误码 含义
SEC_ERROR_STA_INVALID_PARAM

301

参数不正确,请检查输入的参数
SEC_ERROR_STA_DATA_FILE_MISMATCH 302 图片文件有问题。一般情况是生成图片时的bundle id和应用的bundle id不匹配
SEC_ERROR_STA_NO_DATA_FILE 303 没有找到图片文件,请确保图片文件在项目目录下
SEC_ERROR_STA_INCORRECT_DATA_FILE 304 图片文件格式有问题,请重新生成图片文件
SEC_ERROR_STA_INCORRECT_DATA_FILE_DATA 305 图片文件内的内容不正确,请重新生成图片文件
SEC_ERROR_STA_KEY_NOT_EXISTED 306 参数中的key在图片文件中找不到,请确认图片文件中有这个key
SEC_ERROR_STA_NO_MEMORY 308 内存不足,请重试
SEC_ERROR_STA_INVALID_ENCRYPTED_DATA 310 非法的加密数据
SEC_ERROR_STA_DECRYPT_MISMATCH_KEY_DATA 311 待解密数据与密钥不匹配
SEC_ERROR_STA_LOW_VERSION_DATA_FILE 312 请升级新版本的图片,当前图片的版本太低
SEC_ERROR_STA_STORE_UNKNOWN_ERROR 399 未知错误,请重试

3.4 示例程序

  1. #import <SecurityGuardSDK/JAQ/SecurityCipher.h>
  2. @implementation SGTestJAQSecurityCipher
  3. - (void) testJAQSecurityCipher
  4. {
  5. NSString* key = @"3b81f8ee-f2ef-4459-8c67-7bd5b75e8263";
  6. NSString* stringToEncrypt = @"thisastringtoencryptwithalibabajaqserverices";
  7. //加密字符串
  8. NSString* encryptedString = [SecurityCipher encryptString: stringToEncrypt key: key];
  9. //解密字符串
  10. NSString* plainString = [SecurityCipher decryptString: encryptedString key: key];
  11. if ([plainString isEqualToString: stringToEncrypt]) {
  12. NSLog(@"The string encrpytion is a success!");
  13. }
  14. char buf[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  15. NSData* dataToEncrypt = [NSData dataWithBytes: buf length: 10];
  16. //加密byte数组
  17. NSData* encryptedData = [SecurityCipher encryptBinary: dataToEncrypt key: key];
  18. //解密byte数组
  19. NSData* plainData = [SecurityCipher decryptBinary: encryptedData key: key];
  20. if ([plainData isEqualToData: dataToEncrypt]) {
  21. NSLog(@"The Data encrpytion is a success!");
  22. }
  23. }
  24. @end

4 安全存储(SecurityStorage类)

4.1 安全存储说明

安全存储对应用数据进行加密存储。

4.2 安全存储接口

  1. + (NSInteger) putString: (NSString*) value key: (NSString*) key;

功能:保存数据。

参数:key:索引value的key。key:value待存储的数据。

返回值:存储成功返回1,否则返回0。

异常:接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头,错误码的详细定义请见4.3。

  1. + (void) removeString: (NSString*) key;

功能:删除数据。

参数:key:索引value的key。

返回值:无返回值。

异常:接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头,错误码的详细定义请见4.3。

  1. + (NSString*) getString: (NSString*) key;

功能:获取数据。

参数:key:索引value的key。

返回值:返回值为原始保存的数据。

异常:接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头,错误码的详细定义请见4.3。

4.3 错误码

错误码含义
SEC_ERROR_DYN_STORE_INVALID_PARAM 501参数不正确,请检查输入的参数
SEC_ERROR_DYN_STORE_NO_MEMORY 502内存不足,请重试
SEC_ERROR_DYN_STORE_GET_SYS_PROPERTIES_FAILED 503获取系统属性失败,请确认是否有软件拦截,获取系统参数
SEC_ERROR_DYN_STORE_GET_DATA_FILE_KEY_FAILED 504获取图片文件的秘钥失败,请确认图片文件的格式和内容是否正确
SEC_ERROR_DYN_STORE_GET_ENCRYPT_KEY_FAILED 505获取动态加密秘钥失败,请重试
SEC_ERROR_DYN_STORE_INVALID_ENCRYPTED_DATA 506待解密数据不是可解密数据
SEC_ERROR_DYN_STORE_DECRYPT_MISMATCH_KEY_DATA 507待解密数据与密钥不匹配,请重试
SEC_ERROR_DYN_STORE_DDPEX_KEY_VALUE_NOT_EXSIT 508传入key对应的value不存在
SEC_ERROR_DYN_STORE_UNKNOWN_ERROR 599未知错误,请重试

4.4 示例程序

  1. #import <SecurityGuardSDK/JAQ/SecurityStorage.h>
  2. @implementation SGTestJAQSecurityStorage
  3. - (void)testJAQSecurityStorage
  4. {
  5. NSString* stringToStore = @"iamastringtostore";
  6. NSString* myKey = @"myKey";
  7. //存储string
  8. [SecurityStorage putString: stringToStore key: myKey];
  9. //获取存储的值
  10. NSString* storedString = [SecurityStorage getString: myKey];
  11. //清空存储的值
  12. [SecurityStorage removeString: myKey];
  13. if ([storedString isEqualToString: stringToStore]) {
  14. NSLog(@"The String storage is a success.");
  15. }
  16. }

5. 白盒签名(SecuritySignature类)

5.1 白盒签名说明

白盒签名使用白盒加密技术对输入的数据进行加签,进而在服务器端进行数据校验。可以有效防止请求被篡改、中间人劫持等恶意攻击场景。安全性上远远超越普通的安全签名。

5.2 白盒签名接口

+ (NSString*) atlasSign: (NSString*) input key: (NSString*) key;

功能:

使用白盒算法对输入数据进行签名。

参数:

input:待加签数据。

key:在聚安全网站上获取指定密钥key。

返回值:

加签结果。

异常:

接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头,错误码的详细定义请见2.3。

5.3 示例程序

  1. #import <SecurityGuardSDK/JAQ/SecuritySignature.h>
  2. @implementation SGTestJAQSecuritySignature
  3. - (void) testJAQSecuritySignature
  4. {
  5. NSString* key = @"3b81f8ee-f2ef-4459-8c67-7bd5b75e8263";
  6. NSString* valueToSign = @"valuetosign=test&method=md5";
  7. NSString* result = [SecuritySignature atlasSign: valueToSign key: key];
  8. if (result.length) {
  9. NSLog(@"The signature is : %@", result);
  10. //发送到服务器端验签名
  11. // ……
  12. }
  13. }
  14. @end

6. 白盒加密(SecurityCipher类)

6.1 白盒加密说明

白盒加密技术是使用白盒算法对输入的明文数据进行加密,然后返回密文。安全性上远远超越普通的安全加密。

6.2 白盒加密接口

+ (NSString*) atlasEncryptString: (NSString*) input;

功能:

采用白盒方式加密数据。

参数:

input:待加密字符串数据。

返回值:

加密结果。

异常:

接口不抛异常。当调用出错的时候,会在命令行中打印相应的错误日志,错误日志以SG ERROR开头,错误码的详细定义请见3.3。

6.3 示例程序

  1. #import <SecurityGuardSDK/JAQ/SecurityCipher.h>
  2. @implementation SGTestJAQSecurityCipher
  3. - (void) testJAQSecurityCipher
  4. {
  5. NSString* stringToEncrypt = @"WhiteboxEncryptTest";
  6. //加密字符串
  7. NSString* encryptedString = [SecurityCipher atlasEncryptString: stringToEncrypt];
  8. //白盒加密需要发送到服务器端解密
  9. //……
  10. }
  11. @end
本文导读目录