MemGuard
Enclave de software para almacenar información sensible en memoria.
Este paquete intenta reducir la probabilidad de que datos sensibles queden expuestos mientras están en memoria. Su objetivo es ser compatible con los principales sistemas operativos y está escrito en Go puro.
Características
- Los datos sensibles se cifran y autentican en memoria con XSalsa20Poly1305. El esquema utilizado también defiende contra ataques de arranque en frío.
- La asignación de memoria evita el entorno de ejecución del lenguaje mediante el uso de llamadas al sistema para solicitar recursos al núcleo directamente. Esto evita interferencias del recolector de basura.
- Los búferes que almacenan datos en texto plano están reforzados con páginas de guarda y valores centinela para detectar accesos espurios y desbordamientos.
- Se hace un esfuerzo para evitar que los datos sensibles toquen el disco. Esto incluye bloquear la memoria para impedir el intercambio y gestionar los volcados de núcleo.
- Se implementa inmutabilidad a nivel de núcleo para que cualquier intento de modificar regiones protegidas resulte en una violación de acceso.
- Múltiples puntos finales proporcionan capacidades de purga de sesión y terminación segura, así como manejo de señales para evitar que queden datos residuales.
- Se mitigan los ataques de canal lateral asegurando que la copia y comparación de datos se realice en tiempo constante.
Algunas características están inspiradas en libsodium, así que créditos para ellos.
La documentación completa y una visión general de la API se pueden encontrar aquí. Ejemplos de código interesantes y útiles se pueden encontrar dentro del subpaquete examples.
Instalación
$ go get github.com/awnumar/memguard
La API es experimental y puede tener cambios inestables. Deberías fijar una versión. [módulos]
Contribución
- Enviar ejemplos de programa a
./examples.
- Reportar errores, vulnerabilidades y cualquier dificultad en el uso de la API.
- Escribir bibliotecas de seguridad y criptografía útiles que utilicen memguard.
- Implementar protecciones específicas del núcleo o de la CPU.
- Enviar mejoras de rendimiento.
Los issues son para reportar errores y para discutir propuestas. Las pull requests deben hacerse contra la rama master.