首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储过程输出密钥和证书名称是一个安全漏洞吗?

存储过程输出密钥和证书名称是一个安全漏洞吗?
EN

Security用户
提问于 2016-10-05 19:50:29
回答 1查看 138关注 0票数 3

我的场景是:

(遵循在本·卡尔的博客中找到的打开密钥、加密和关闭密钥的方法。)

假设您有一个MS服务器,它有大量密钥用于加密不同表中的不同字段,这些字段是您经常更新的,您使用过程打开密钥并关闭密钥,但是为了减少您必须经常更新的过程和函数的数量,您取消了加密数据的函数,而是使用OUTPUT密钥和证书名称,这样您就可以使用常规的加密函数和来自OpenKey过程输出参数的密钥和证书。

看起来会是这样的:

代码语言:javascript
复制
CREATE PROC [dbo].[sproc_OpenKey_10]
    (
        @Key CHAR(10) OUTPUT
        ,@Cert CHAR(10) OUTPUT
    )
AS 
BEGIN

    IF CONVERT(DATE,GETDATE())  < '1/1/2017'
        BEGIN
            OPEN SYMMETRIC KEY AC_16
            DECRYPTION BY CERTIFICATE WebAC16
            Set @Key = 'AC_16'
            Set @Cert = 'WebAC16'
        END
    ELSE    
        BEGIN
            OPEN SYMMETRIC KEY AC_17
            DECRYPTION BY CERTIFICATE WebAC17
            Set @Key = 'AC_17'
            Set @Cert = 'WebAC17'
        END
    RETURN
END

因此,使用这个函数和加密如下:

代码语言:javascript
复制
DECLARE @Key10 CHAR(10)
DECLARE @Cert10 CHAR(10)
DECLARE @EncID VARCHAR(100)

EXEC dbo.sproc_Secure_OpenKey_10 @Key = @Key10 OUTPUT, @Cert = @Cert10 OUTPUT   
SET @EncID = EncryptByKey(Key_GUID(@Key10), @Custid)

(注:证书将存储在表中,以便稍后解密--这就是返回证书的原因。)

从理论上讲,这很方便,您只需更新OpenKey和CloseKey过程即可。

我的问题是:

从OpenKey存储过程中输出密钥和证书名称是可能的安全漏洞吗?如果是的话,有什么办法可以保证这个安全?

如有任何意见,我将不胜感激。

谢谢!

EN

回答 1

Security用户

回答已采纳

发布于 2016-11-09 18:42:37

经过一段时间的研究,我想我已经回答了我自己的问题。

当使用这种打开和关闭键的方法时,您不会设置任何权限,因此,任何没有相应权限的东西都不能使用存储过程并接收输出的密钥和证书名称-- OpenKey和CloseKey存储过程在调用存储过程的权限下工作,因此只有具有权限的调用存储过程才能使用和查看OpenKey过程输出的密钥和证书名称。

总之:似乎输出OpenKey存储过程中的密钥和证书名称不应该创建安全漏洞,前提是没有为其设置权限。

我想我应该分享我的发现,如果它能帮助别人的话。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/138864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档