Mi escenario es este:
(Siguiendo el método de abrir claves, cifrar y cerrar claves, se encuentra en Blog de Ben Cull .)
Imagine que tiene un servidor MS SQL con toneladas de claves para cifrar diferentes campos en diferentes tablas que actualiza cada cierto tiempo, y utiliza procedimientos para abrir las claves y cerrarlas, PERO para reducir la cantidad de procedimientos. y las funciones que tiene que actualizar de vez en cuando, elimina las funciones para cifrar los datos y, en cambio, OUTPUT
la clave y los nombres de certificado, por lo que solo puede usar la función de cifrado normal con la clave y el certificado de los parámetros de SALIDA de el procedimiento OpenKey.
Se vería algo como esto:
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
Y así, usar la función y el cifrado se vería así:
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)
(NOTA: el certificado se almacenaría en la tabla para su descifrado más tarde, por eso se lo devolvería).
En teoría, esto sería útil, ya que solo tendría que actualizar los procedimientos de OpenKey y CloseKey.
Mi pregunta es:
¿La salida de los nombres de clave y certificado de un procedimiento almacenado de OpenKey es un posible agujero de seguridad? Si es así, ¿hay alguna manera de hacer esto seguro?
Apreciaré cualquier entrada.
¡Gracias!