网站大量收购独家精品文档,联系QQ:2885784924

HDFS-加密区EncryptionZone源码分析讲述.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
HDFS-加密区EncryptionZone源码分析讲述

Encryption zone 数据加密空间-保证数据不被非法查阅 Encryption zone HDFS Encryption zone加密空间是一种end-to-end(端到端)的加密模式。其中的加/解密过程对于客户端来说是完全透明的。数据在客户端读操作的时候被解密,当数据被客户端写的时候被加密,所以HDFS本身并不是一个主要的参与者,形象的说,在HDFS中,你看到的只是一堆加密的数据流。 Encryption zone原理介绍 了解HDFS数据加密空间的原理对我们使用Encryption zone有很大的帮助。Encryption zone是HDFS中的一个抽象概念,它表示在此空间的内容在写的时候会被透明的加密,同时在读的时候,被透明的解密。这就是核心所在,具体到细小的细节: 1.每个encryption zone 会与每个encryption zone key相关联,而这个key就是会在创建encryption zone的时候同时被指定。 2.每个encryption zone中的文件会有其唯一的data encryption key数据加密key,简称就是DEK。 3.DEK不会被HDFS直接处理,取而代之的是,HDFS只处理经过加密的DEK, 就是encrypted data encryption key,缩写就是EDEK。 4.客户端询问KMS服务去解密EDEK,然后利用解密后得到的DEK去读/写数据。 在第四步骤有一个很重要的过程: 在客户端向KMS服务请求时候,会有相关权限验证,不符合要求的客户端将不会得到解密好的DEK。而且KMS的权限验证是独立于HDFS的,是自身的一套权限验证。 下面是对应的原理展示图: Key Provider可以理解为是一个key store的保存库,KMS是其中的一个实现。 Encryption zone下的写文件 首先客户端发起createFile请求,到了NameNode这边,会调用startFile方法,里面就会有DEK、EDEK的生成 private HdfsFileStatus startFileInt(final String src, PermissionStatus permissions, String holder, String clientMachine, EnumSetCreateFlag flag, boolean createParent, short replication, long blockSize, CryptoProtocolVersion[] supportedVersions, boolean logRetryCache) throws IOException { ... FSDirWriteFileOp.EncryptionKeyInfo ezInfo = null; // 判断key provider是否为空 if (provider != null) { readLock(); try { checkOperation(OperationCategory.READ); // 不为空,就生成EncryptionKey info. ezInfo = FSDirWriteFileOp .getEncryptionKeyInfo(this, pc, src, supportedVersions); } finally { readUnlock(); } // Generate EDEK if necessary while not holding the lock if (ezInfo != null) { // 然后根据ezInfo的key名称生成EDEK信息在ezInfo中 ezInfo.edek = FSDirEncryptionZoneOp .generateEncryptedDataEncryptionKey(dir, ezInfo.ezKeyName); } EncryptionFaultInjector.getInstance().startFileAfterGenerateKey(); } ... try { // 继续调用startFile方法 stat = FSDirWriteFileOp.startFile(this, p

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档