当前位置:主页 > 网络安全 >

cdn防护_服务器防火墙为什么会自动开启_怎么防

时间:2021-06-11 22:16来源:E度网络 作者:E度网络 点击:

cdn防护_服务器防火墙为什么会自动开启_怎么防

所以你有一个最后一刻的要求,通过在数据库级别加密来保护你的客户数据?别惊慌。深呼吸,保持冷静,继续读。。。之前,我讨论了一些更高级别的关注点和陷阱,并尝试使用自己的密钥管理。在今天的帖子中,我将深入探讨如何在不重新发明轮子的情况下做到这一点。让我们从描述系统如何工作开始。KMS提供了x项功能,使数据的安全变得更加容易:生成主密钥和数据密钥使用主密钥加密/解密小数据块。生成随机数据这三个密码原语一直在我们的最后阶段。让我们从钥匙开始。用数据存储密钥如上所述,AWS允许您加密/解密少量数据(大小可达4k)。API中对此进行了描述。乍一看,ddos防御nginx,你可能会想"这有什么好处,我的数据要大得多!"不用担心,我们将使用一种既安全又高效的信封加密技术。基本上,我们要在数据中存储一个加密的密钥。让我们使用以下设置来布置公式:p=您希望加密的明文(数据)c=密文(加密数据)Kd=用于加密数据的密钥Cd=密文形式的KdKm=您的AWS主密钥e()=加密算法d()=解密算法在信封加密中,我们用Kd对数据进行加密,然后使用主密钥Km对密钥本身进行加密。然后数据密钥Kd和c一起存储,低成本ddos防御,直到解密。作为一个公式,ddos防御主机,它看起来是这样的c=e(p,Kd)所以密文是加密算法、明文和密钥的函数。这是密码101。但是,我们不要试图将Kd隐藏在某个地方,而是使用AWS主密钥(它驻留在HSM中的AWS硬件上,永远不会泄露):Cd=e(千分,公里)随着Kd现在被安全地加密为Cd,我们可以将其与cipertext一起存储在数据库中。KMS使这一点变得非常简单,因为我们可以使用单个API调用生成Kd,并使用已用Km加密的密文版本将其返回给我们:generatedakeyrequest dataKeyRequest=新建generatedakeyrequest();dataKeyRequest.setKeyId(主密钥ID);dataKeyRequest.setKeySpec(AWS_算法);GenerateTakeyResult数据键结果=kmsClient.GenerateTakey(dataKeyRequest);ByteBuffer纯文本密钥=dataKeyResult.getPlaintext();ByteBuffer加密密钥=dataKeyResult.getCiphertextBlob();AWS_算法是一个字符串常量,设置为AES_256。现在我们有了明文和密文形式的数据密钥Kd,我们几乎准备好用它加密我们的数据。首先我们还有一个任务要处理:我们需要一个初始化向量!我们有两种获取随机数据的方法,使用Java的SecureRandom或KMS API。不幸的是,SecureRandom并非没有缺陷,因此我们将使用KMS API来生成随机数据(KMS HSM提供的随机数据应该非常随机):////Amazon KMS//GenerateRandomRequest randomRequest=newGeneratorAndomRequest().withNumberOfBytes(16)提供的128字节IV;GeneratorDomainResultrandOMResult=kmsClient.generateRandom(随机请求);字节[]iv=阵列(随机结果.getPlaintext();使用我们的明文数据密钥、随机生成的IV和我们的数据,让我们设置AES密码,加密数据,然后将其保存为十六进制字符串。这是纯Java加密:////使用指定的算法和AWS生成的IV设置密码//SecretKeySpec SecretKeySpec=newSecretKeySpec(aesKey,算法);密码密码=密码.getInstance("AES/CBC/PKCS5Padding");密码.init(加密模式,secretKeySpec,newIvParameterSpec(iv));字节[]密文=密码.doFinal(数据);字符串密文字符串=十六进制编码HexString(密文);我们使用一个十六进制字符串来存储密文,因为在我们的例子中,我们将序列化为JSON。如果您注意了,您可能会意识到使用此设置,cc防御级别过高,数据库中的每一行都将使用不同的数据密钥进行加密!这是正确的,服务器ddos防御,有助于将每行的数据彼此隔离。当在数据库中存储密文时,您将希望通过tebuffer和IV来存储加密密钥。加密密钥实际上有基本的密钥元数据,在解密密钥时使用这些元数据。解密很简单:////从解密数据密钥开始//DecryptRequest DecryptRequest=newDecryptRequest().withCiphertextBlob开始(ByteBuffer.wrap公司(加密密钥));DecryptResultdecryptResult=kmsClient.decrypt(解密请求);字节[]aesKey=toArray(解密结果.getPlainText();解密实际数据:////使用指定的算法和AWS生成的IV设置密码//SecretKeySpec SecretKeySpec=newSecretKeySpec(aesKey,算法);密码密码=密码.getInstance("AES/CBC/PKCS5Padding");密码.init(密码解密模式,secretKeySpec,newIvParameterSpec(iv));字节[]密文=密码.doFinal(十六进制解码(密文目录()));重要提示:确保您现在将所有敏感数据归零(例如您的aesKey):/***将字节数组归零,覆盖其以前的内容。*@param b要归零的字节数组。此参数可能为空。*/私有空零(字节[]b){如果(b!=空){for(int i=0;i
推荐文章
最近更新