iOS安全概要-4-加密服务(Cryptographic Services)

4 加密服务(Cryptographic Services)

加密服务构成传输过程(安全通信)和数据静止(安全存储)中保护数据的基础。使用复杂的数学运算,他们让你:

  • 加密和解密数据,以便它不能被外部观察者理解
  • 确认数据没有被修改,因为它最初是由通过哈希(hashing),签名(signing)和验证(verifying)方法发送

本章描述了这些加密技术并简要总结了OS X和iOS提供的技术,帮助您在自己的应用程序中使用加密。

4.1 加密和解密(Encryption and Decryption)

加密是一种保护数据的手段,将数据转换成除了知道如何转化回去的人之外的人拦截后不可读。
加密通常用于在传输过程和存储中保护数据。当信息必须通过一个不可信的通信通道发送,它的责任是两个端点使用加密来保护通信。同样,在本地磁盘的存储信息,应用程序可以使用加密来确保信息对于第三方是不可读即使是电脑被盗了。
有许多不同的加密技术,称为密码(ciphers),以不同的方式工作,能起到不同的作用。密码一般工作结合原始信息(明文cleartext或纯文本plaintext)与第二个信息(关键key)以某种方式生成一个加密的形式,称为密文(ciphertext)。
现代加密技术可以分为三大类:对称加密(symmetric encryption)、非对称加密(asymmetric encryption)和速记式加密(steganography)。

4.1.1对称加密(symmetric encryption)

在对称加密,一个单独的密钥(通常是一个随机字节的长串)用于数学变换信息,然后用于相反的取回原始信息。

security_symmetric.jpg

对称加密通常用于安全通信。然而,由于两个端点必须知道相同的密钥,对称加密本身是不够的。

4.1.2非对称加密(asymmetric encryption)

在非对称加密,用两个数学相关密钥来转换的信息。使用一个密钥加密的信息只能用另一个密钥来解密,反之亦然。一般来说,其中一个密钥(私钥)是保密的,和其他密钥(公钥)是由广泛可用。出于这个原因,非对称加密也被称为公钥密码学(public key cryptography)。

注意:虽然这两个密钥是数学相关,从一个密钥导出另一个密钥在计算上被认为是不可能的。公钥加密的安全取决于这种情况。

security_asymmetric.jpg

非对称加密通常用于建立一个共享的通信通道。因为非对称加密计算昂贵,两个端点(endpoints)通常使用非对称加密交换对称密钥,然后使用较快的对称加密算法对实际数据加密和解密。
非对称加密也可以用来建立信任。通过你的私钥加密的信息,别人能使用你的公钥读懂这些信息并确认信息是由你加密的。

4.1.3隐写术(steganography)

隐写术意思是隐藏信息在不太重要的另一个信息中。

security_steganography.jpg

隐写术通常用于在照片中存储版权信息以大量的不可识别的噪音的形式,除非你知道如何去寻找它。
隐写术也可以用于存储加密卷下面其他加密或不加密卷(通过使用未使用的块或利用以微妙的方式误差修正)。

4.2 哈希散列(Hashing)

散列值,或散列,是一小块的数据来源于一块较大的数据,可以作为一个较大的数据的代理。在密码学中,哈希表用来验证数据的真实性。加密散列算法本质上是一种(非常)有损数据压缩,但是他们专门设计,因此两个相似的数据不太可能散列到相同的值。

例如,两个小学生经常通过来回传递笔记来决定何时一起走路回家。一天,一个恶霸拦截到笔记并且安排鲍勃早十分钟到达,这样他可以偷鲍勃的午餐钱。为了确保他们的信息以后没有被修改,他们设计了一个方案,计算信息中字母的数量除以他们的年龄的总和的余数,然后写了很多点在消息的角落里。通过计算字母的数量他们可以(粗糙)检测到信息是否被修改。
当然,这是一个做作的例子。一个简单的余数是一个很弱的散列算法。好的哈希算法 ,如果你在一块数据上做一些小小的改变,碰撞时不太可能的。这种篡改,抵抗自然的好的散列算法制作一个关键的组件在代码签名,消息签名和其他各种篡改检测方案中。

在高级别上,哈希散列也类似于核对总和(checksumming)(检测和纠正传输数据错误的技术)。然而,这些技术的目标是不同的,所以使用的算法也很不同。校验和通常设计为允许检测和修复一个改变或少量的变化。相比之下,密码散列必须可靠地检测一段数据的大量的更改但不需要告诉你数据如何改变。
例如,以下shell命令中演示了一个通常的散列算法:

$ echo "This is a test. This is only a test." | sha1sum
7679a5fb1320e69f4550c84560fc6ef10ace4550 -

OS X提供了许多C语言 api来执行散列。这些进一步描述本章结束的引用文章中。

4.3 签名和验证(Signing and Verifying)

签名是一种证明消息真实性的方式,或者验证服务器,用户或其他实体的身份。
从前,人们有时用封蜡给信封盖上邮戳。这种印章不仅证明谁发送消息,也证明了在运输途中没有人打开或者修改它。

现代签署通过数学达到许多相同的好处。除了数据本身,签名和验证需要两条信息:适当的一半的公私密钥对和一个数字证书。

消息的发送方计算数据的哈希表然后用私钥加密。收件人也计算哈希表,然后使用相应的公钥解密发送方的哈希表和并进行比较。如果他们是相同的,在传输途中的数据没有修改,您可以安全地相信数据是由密钥的所有者发送的。

发送者的数字证书是数据的集合,其中包含公钥和其他识别信息,在发送者的自由裁量权,例如一个人的名字,公司名称,域名和邮政地址。证书的目的是把一个公钥给一个特定的人。如果你信任的证书,那你也相信由那个人发送的使用发送方的私钥签名的消息。

提供一种确定证书合法性的方式 ,发送方的证书是由其他人签名的,他的证书依次被另外的人签名,等等,形成了一个收件人一直信任的证书的信任链,称为锚证书(anchor certificate)。这个证书可能是根证书--自签名证书代表一个已知的证书颁发机构,因此树的根证书来自权威机构或它可能是用户或应用程序开发人员已经明确指定为信任锚的任意证书,。

因为收件人信任锚证书,收件人知道证书是有效的,因此,发件人是他或她自称的。收件人信任证书的程度由两个因素决定:

  • 每个证书都可以包含一个或多个证书扩展(certificate extensions)描述如何使用证书。例如,一个可信的证书签署邮件可能不被信任签署可执行代码。
  • 信任策略(trust policy)允许您信任证书,否则是不可信的,反之亦然。

证书还可以用于身份验证。通过签名一个随机数(一个为这个目的特别创建的随机生成的挑战字符串),用户或服务器可以证明他,她,或是它拥有与证书关联的私钥。如果证书是可信(通过评估其信任链),然后证书和签名的随机数证明用户或服务器必须是他,她,或者它声称的。

4.4 安全存储(Secure Storage)

OS X和iOS提供大量的技术安全存储。其中,三个最常用的技术是钥匙串,FileVault和数据保护。

4.4.1 钥匙串(Keychains)

钥匙串类似于物理概念的钥匙串,它是一个存储以后用来执行加密任务的密钥和小块数据的地方,但结局是相似的。物理的钥匙环,主人可以用来挂钥匙,用它来解锁。使用钥匙串,应用程序通常不访问实际的关键数据本身,所以即使被入侵他们没有暴露密钥的风险。相反,他们使用一个惟一的标识符来标识这些密钥,实际的加密算法执行在一个单独的进程中被称为安全服务器(Security Server)。

因此,钥匙串在某种程度上更像是一个携带密匙环的全副武装的守卫。你可以问卫兵为你开启一扇你已经被授权进入的门,但你通常不能自己开门。

OS X还包括一个实用程序,允许用户存储和读取的钥匙串中的数据,称为钥匙串访问(Keychain Access)。这个实用程序之后会有详细描述,在钥匙链访问。

4.4.2 FileVault

OS X中,FileVault使用加密提供加密存储用户的文件。启用FileVault时,磁盘只有授权用户登录后才进行解密。(注意,OS X v10.7之前,FileVault只保护一个用户的主目录)。

4.4.3 数据保护(Data Protection)

iOS提供的api允许应用程序文件只能在设备解锁来保护自己的内容。与数据保护、文件存储在加密和解密后才用户输入他或她的密码。
应用程序在后台运行,也有设置,使文件保持可用,直到用户关闭设备。

附录A:安全服务器和安全代理

OS X和iOS安全实现包含一个守护进程称为安全服务器,实现几个安全协议,如访问密钥链项和根证书信任管理。OS X还包括一个单独的用户代理,称为安全代理,使用安全服务器显示用户界面。
本附录简要描述他们的作用。

安全服务器(Security Server)

安全服务器(securityd)是一个运行在OS X和iOS上的守护进程,实现几个安全协议,如加密、解密和授权计算(在OS X)。

在OS X和iOS,安全服务器监听各种安全api的消息并执行加密服务。因为开发人员通常使用引用密钥而不是用自己的密钥,安全服务器可以保留那些从客户进程中分离出来的地址空间的密钥,从而减少意外的信息泄露的风险。

作为一个额外的优势,只要苹果公司引入了新的身份验证或加密技术,现有的使用OS X安全API的软件可以不用更改代码透明地支持它,提供软件不需要直接导入或导出密钥。

安全服务器没有公共API。相反,你的代码调用API,如钥匙链服务(Keychain Services);证书(Certificate),密钥(Key),信任服务(Trust Services);和授权服务(Authorization Services,只在OS X),依次与安全服务器进行通信。

安全代理(Security Agent)

安全代理是一个单独的进程,提供了用户界面在OS X安全服务器(不在iOS)。它的主要目的是请求身份验证时应用程序请求额外的特权。

安全服务器要求用户进行身份验证时,安全代理显示一个对话框,要求用户名和密码。执行此操作的优势在一个单独的过程是双重的。首先,应用程序可以在没有访问用户的凭证(例如,用户名和密码)时获得授权。第二,它使苹果能够添加新的身份验证的形式,而不需要每一个应用程序来了解它们。

安全代理要求用户为了进行身份验证必须在现场。因为图形用户界面元素不能通过命令行界面例如终端(Terminal)使用或安全shell(ssh)远程会话,这一限制使恶意用户攻击应用程序的安全更加困难。

注意:iOS安全服务接口不提供身份验证。因此,安全服务器没有必要有用户界面,因此,iOS不提供安全代理。

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

推荐阅读更多精彩内容