-
Cifrado:
-
Utiliza cifrado AES-GCM para encriptar los mensajes.
-
Implementa un sistema de cifrado de capas múltiples (mixnet) para mayor seguridad.
-
Protocolos:
-
Utiliza el protocolo libp2p para la comunicación peer-to-peer.
-
Implementa un sistema de publicación-suscripción (pubsub) para la distribución de mensajes.
-
Utiliza mDNS para el descubrimiento de pares en la red local.
-
Implementa una tabla de hash distribuida (DHT) para el descubrimiento de pares en redes más amplias.
-
Privacidad y Seguridad:
-
Los mensajes están cifrados de extremo a extremo.
-
Utiliza un sistema de capas múltiples de cifrado que puede proporcionar cierto grado de anonimato.
-
Implementa autenticación mediante tokens JWT para algunas rutas de la API.
-
Resistencia a la censura:
-
Al ser una red P2P, es inherentemente resistente a la censura centralizada.
-
El uso de DHT permite el descubrimiento de pares incluso si algunos nodos son bloqueados.
-
Características adicionales:
-
Compresión de mensajes usando gzip.
-
Sistema de "tablones" para organizar mensajes.
-
Funcionalidad para dar "me gusta" a mensajes y tablones.
-
Logging de eventos del sistema.
Para mejorar el código, se podrían considerar las siguientes modificaciones:
-
Añadir video
-
Implementar un mejor manejo de errores y recuperación en caso de fallos de red.
-
Mejorar la gestión de claves, posiblemente implementando un sistema de intercambio de claves.
-
Agregar más capas de anonimato, como el enrutamiento de cebolla.
-
Implementar un sistema de reputación para los pares para mejorar la confiabilidad de la red.
Cifrado de mensajes:
- La función
encryptMessageutiliza AES-GCM para cifrar los mensajes. - La función
mixnetEncryptaplica múltiples capas de cifrado utilizando diferentes claves.
Descifrado de mensajes:
- La función
decryptMessagedescifra los mensajes cifrados con AES-GCM. - La función
mixnetDecryptaplica múltiples capas de descifrado en orden inverso.
Serialización y deserialización segura:
serializeMessagecomprime, cifra y serializa los mensajes antes de enviarlos.deserializeMessagedeserializa, descifra y descomprime los mensajes recibidos.
Uso de libp2p para comunicación P2P:
- Implementa una red P2P utilizando libp2p, lo que dificulta el rastreo de los mensajes.
Enrutamiento de mensajes:
- La función
routeMessageañade un retraso aleatorio, lo que puede ayudar a prevenir ataques de análisis de tráfico.
Anonimato de usuarios:
- Los mensajes utilizan una estructura
UserInfoque no requiere información personal identificable.
Compresión de datos:
- Las funciones
compressydecompressañaden una capa adicional de ofuscación a los datos.
Autenticación con JWT:
- Implementa autenticación basada en tokens JWT, lo que permite el acceso seguro sin exponer credenciales.
En general, este código proporciona una base sólida para una aplicación de mensajería distribuida y resistente a la censura, con un buen nivel de privacidad y seguridad.
Compilar desde termux en android
go build -ldflags="-checklinkname=0" -o myapp main.go
choco install openssl.light openssl genrsa -out key.pem 2048 openssl req -new -key key.pem -out csr.pem openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out cert.pem
genera: csr.pem y key.pem
openssl genrsa -out key.pem 2048
openssl req -new -key key.pem -out csr.pem -subj "/CN=localhost"
openssl x509 -req -days 365 -in csr.pem -signkey key.pem -out cert.pem
generara: cert.pem
tcp.port == 8443 && ip.addr == 127.0.0.1
go build -o p2p-app-secure.exe .\p2p-app-secure.exe -config security_config.yaml