El fin de la seguridad basada en roles y el auge de la seguridad basada en atributos
6 minutos de lectura
Internet tiene más de cinco décadas y aún tenemos filtraciones de datos y compromisos de ciberseguridad. Uno de los problemas en esto se relaciona con el uso de seguridad basada en roles, así que veamos una alternativa: cifrado basado en atributos (ABE). Básicamente, comenzamos con la seguridad basada en roles, ya que combinaba bien con el sistema operativo, pero la hemos ampliado para que funcione a nivel corporativo. Desafortunadamente, los derechos del sistema operativo no coinciden bien con lo que se define dentro de las organizaciones. Nuestros enfoques basados en roles pueden verse como un legado del pasado, y nos resultó más fácil escalar los roles en lugar de proteger nuestros datos adecuadamente.
El problema de la seguridad basada en roles
En ciberseguridad, la mayoría de nuestros sistemas se basan en seguridad basada en roles, y esto a menudo tiene fallas, ya que la seguridad simple tiene algunos roles, como personal y estudiantes. Para ello, todas las personas en el puesto de personal obtienen los mismos derechos (incluso si los necesitan o no). Luego, a menudo agregamos otros roles, como administrador, producción, etc., y luego más roles además de eso. A medida que escalamos con más y más roles, todo se vuelve confuso de administrar y un adversario puede simplemente seleccionar a un usuario con suficientes derechos para lograr su misión.
Hoy en día, muchas empresas que se toman en serio la ciberseguridad se centran en entornos de confianza cero y en los que no se obtiene acceso automáticamente a un recurso sólo por tener una determinada función. En general, debes demostrar que tienes derecho a acceder a un rol, como por ejemplo que estás en un lugar determinado y en un momento determinado. Este enfoque detiene a los usuarios en la puerta e incluso antes de que tengan derecho a acceder a un servicio.
En un mundo perfecto de ciberseguridad, cada dato tiene una política de acceso asociada, como “Bob y Alice pueden cambiar, Carol puede eliminar y Dave puede ver. Sólo se accede desde Edimburgo o Glasgow, y sólo entre las 9:00 y las 17:00 horas”. Luego, los usuarios tendrían que demostrar que tienen derecho a acceder a los datos. Implementaríamos el acceso a estos datos sin enclaves seguros para los datos.
Cifrado basado en atributos
Por lo general, somos deficientes a la hora de integrar adecuadamente la seguridad y, a menudo, utilizamos modelos superpuestos para superar nuestra falta de seguridad integrada. Nuestros modelos de seguridad también provienen a menudo de nuestros sistemas operativos heredados y no protegen los datos (ya que fueron diseñados para proteger archivos y directorios en lugar de datos). Por lo tanto, a menudo no logramos cifrar los datos correctamente y recurrimos al sistema operativo para proporcionar derechos sobre los archivos. Por tanto, nuestras políticas generales se centran en los documentos y no en los datos.
Hemos creado así un mundo de datos abierto y luego, para protegerlo, levantamos perímetros. Pero descubrimos que hay personas internas que se sientan detrás del firewall y pueden acceder a nuestros datos. Luego ciframos con una clave de cifrado, pero esto suele aplicarse a una escala bastante grande. Entonces, ¿cómo controlamos el acceso a datos confidenciales cuando utilizamos el almacenamiento basado en la nube? Bueno, debemos buscar mejores formas de proteger nuestros datos y al mismo tiempo poder procesarlos.
Los sistemas que hemos creado han crecido a través de la seguridad del sistema operativo y aplican seguridad basada en roles. En un sistema Linux podemos tener:
Usuario: bob
Grupo: gp
y tenemos derechos de acceso como:
Usuario =rwx Grupo=rwx Todos=rwx
En este caso, Bob tendrá derechos de acceso basados en su propiedad sobre un archivo o en el grupo en el que se encuentra, y se define como seguridad basada en roles. En una infraestructura de Active Directory, Bob también puede formar parte de varios grupos, lo que le otorgará derechos. Pero ser parte de un grupo no implica aplicar la seguridad adecuadamente y, por lo tanto, normalmente tenemos que superponer un modelo de seguridad para verificar los derechos de Bob para acceder a un archivo determinado. Lo que realmente queremos es poder definir que el acceso se basa en otras cosas, como su ubicación o si es el médico asociado a un paciente. Estos se definen como atributos para sus derechos de acceso y definen la seguridad basada en atributos.
Uno de los mejores métodos para incorporar seguridad en los datos es ABE (cifrado basado en atributos), donde podemos definir un control detallado del proceso de descifrado. Por ejemplo, podríamos definir que cierta información de salud confidencial solo sea accesible cuando el paciente y el médico se hayan autenticado y se encuentren en una ubicación demostrable. Así, durante el proceso de cifrado, aplicamos una política:
Política = ((usuario=GP y ubicación=Edimburgo) o (usuario=Paciente y ubicación=Escocia)
En este caso, permitiríamos el acceso a un archivo en función de un usuario que sea médico de cabecera en Edimburgo o un paciente escocés. De esta forma podemos basar nuestros accesos en atributos reales y no en derechos del sistema operativo.
Hay dos tipos principales de ABE. El primero es el cifrado basado en atributos de política de claves (KP-ABE) y el otro es el cifrado basado en atributos de política de texto cifrado (CP-ABE). En KP-ABE, generamos la clave en función de una política que contiene atributos. Para CP-ABE, utilizamos una estructura de árbol con diferentes claves para acceder a atributos determinados.
Recomendado por LinkedIn
Esta página proporciona una demostración básica de BWS CP-ABE y dónde utilizamos el JB para el cifrado basado en emparejamiento [1]. En este caso tenemos varias etapas para el proceso de cifrado:
Nuestro futuro debe construirse incorporando políticas en nuestros datos y apoyando a los usuarios proporcionándoles diversos atributos para definir los derechos que tienen para acceder a los datos.
Codificación
paquete co.junwei.bswabe.demo;
importar co.junwei.bswabe.*;
Demostración de clase pública { DEBUG booleano estático final = verdadero ; public static void main ( String[] args ) lanza Exception { String[] attr = { "baf" , "fim1" , "fim" , "foo" }; Cadena[] attr_delegate_ok = { "fim" , "foo" }; Cadena[] attr_delegate_ko = { "fim" }; Cadena[] attr_delegate_ko2 = { "foo" }; Política de cadena = "foo bar fim 2of3 baf 1of2" ; if (args.length== 1 ) { política= args[ 0 ]; } Sistema. out .println( "Ejecutando..." ); BswabePub pub = nuevo BswabePub(); BswabeMsk msk = nuevo BswabeMsk(); BswabePrv prv, prv_delegate_ok, prv_delegate_ko,prv_delegate_ko2; BswabeCph cph; Resultado BswabeElementBoolean; //attr = atributo_kevin; //attr = atributo_sara; //política = política_kevin_or_sara; Bswabe.setup(pub, msk); Sistema. fuera .println( "\n=====Keygen" ); prv = Bswabe.keygen(pub, msk, attr); Sistema. out .println( "Clave pública (g)" +pub.g.toString()); prv_delegate_ok = Bswabe. delegado (pub, prv, attr_delegate_ok); prv_delegate_ko = Bswabe. delegado (pub, prv, attr_delegate_ko); prv_delegate_ko2 = Bswabe. delegado (pub, prv, attr_delegate_ko2); Sistema. out .println( "Máscara (beta): " +msk.beta.toString()); Sistema. out .println( "Máscara (g_alpha): " +msk.g_alpha.toString()); Sistema. out .println( "Clave privada (prv): " +prv.hashCode()); Sistema. out .println( "Política:" +policy.toString()); println( "\n====Cifrado" ); BswabeCphKey cifrado = Bswabe.enc(pub, política); cph = cifrado.cph; println( "Cifrado: " +cph.toString()); println( "\n=====Descifrando" ); resultado = Bswabe.dec(pub, prv, cph);
if ((result.b == true ) && (resultado.e. es igual (crypted.key) == true ))
System. out .println( "Éxito" );
else
System.err.println( "¡¡¡Fallo!!!" );
println( "\n=====Probando política ('fim','foo')" );
resultado = Bswabe.dec(pub, prv_delegate_ok, cph);
if ((result.b == true ) && (resultado.e. es igual (crypted.key) == true ))
System. out .println( "Éxito" );
else
System.err.println( "Error" );
println( "\n=====Probando política ('fim')" );
resultado = Bswabe.dec(pub, prv_delegate_ko, cph);
if ((result.b == true ) && (resultado.e. es igual (crypted.key) == true ))
System. out .println( "Éxito" );
else
System.err.println( "Error" );
println( "\n=====Probando política ('foo')" );
resultado = Bswabe.dec(pub, prv_delegate_ko2, cph);
if ((result.b == true ) && (resultado.e. es igual (crypted.key) == true ))
System. out .println( "Éxito" );
else
System.err.println( "Error" );
}
privado estático vacío println ( Objeto o ) {
si (DEBUG)
Sistema. fuera .println(o);
}
}
Encontrarás más ejemplos aquí:
Cifrado basado en atributos (ABE)
Bienvenido a Asecuritysite.com Con CP-ABE (Cipher Policy - Attributed-Based Encryption) podemos generar un cifrado…
Conclusiones
Entiendo que no nos desharemos de la seguridad basada en roles, pero debemos combinarla con otros atributos, ya que los roles por sí solos normalmente no son suficientes. A menudo se requieren ubicación, hora y datos biométricos para acceder a datos confidenciales. En un verdadero sistema de nube, no vemos los derechos subyacentes del sistema operativo y, por lo tanto, deberíamos intentar separarlos y trabajar en un nivel superior.
Referencias
[1] Bethencourt, J., Sahai, A. y Waters, B. (mayo de 2007). Cifrado basado en atributos de política de cifrado . En Seguridad y Privacidad, 2007. SP'07. Simposio IEEE sobre (págs. 321–334). IEEE.
Original: