#"
FenixIRCDocs v4.2
Profile
TLS 1.3 · PUERTO 6697
Documentación Oficial · FenixIRC Core RFC 7194 / RFC 8446

Protocolo SSL/TLS y Conectividad Segura en FenixIRC

Guía técnica integral sobre validación de certificados X.509, autenticación SASL en túnel aislado, prevención activa de ataques Man-in-the-Middle y mitigación de degradación criptográfica en redes no confiables.

schedule 10 min lectura
lan Nivel: Redes & TLS Core
verified_user Certificados X.509 Nativo
shield_lock Zero-PlainText Leak
bolt Simular Handshake TLS
SECCIÓN 01 / ARQUITECTURA DE DATOS

Arquitectura de Configuración y Mapeo de Parámetros

Cada instancia de servidor en FenixIRC persiste mediante la entidad reactiva ServerEntity.kt, administrada con StateFlow por ServersViewModel.kt y renderizada en Compose a través de ServerEditScreen.kt.

Diccionario de Atributos Criptográficos
Parámetro UI Propiedad Kotlin Valor / Por Defecto Implicación TLS
Nombre de Red name: String "Libera.Chat" Identificador en logs y session storage
Servidor / Host host: String irc.libera.chat Sujeto a validación SAN en handshake X.509
Puerto Seguro port: Int 6697 (SSL) vs 6667 Conexión SSL implícita instantánea
Usar SSL/TLS useSsl: Boolean true (Activado) Despacha SSLSocketFactory directo
Texto Plano allowPlainText: Boolean false (Restringido) Previene degradación accidental a puerto 6667
Autenticación SASL useSasl: Boolean PLAIN sobre túnel TLS Aislado criptográficamente pre-registro
Bouncer Proxy useBouncer: Boolean ZNC / SOJU Support Túnel SSL hacia el bouncer intermedio
Codificación encoding: String UTF-8 Evita colisiones de decoding en bytes cifrados
info
Regla de Inmutabilidad Segura

Cuando useSsl = true, el motor FenixIRC invalida cualquier fallback a texto claro. Si el servidor remoto rechaza el socket seguro o falla el certificado, la conexión finaliza con SSLHandshakeException sin transmitir nicks ni tokens.

ServerEditScreen.kt · Preview
Compose UI
Libera.Chat verified
irc.libera.chat
6697
lock
Usar SSL / TLS Cifrado simétrico AES-GCM forzado
fingerprint
Autenticación SASL Mecanismo PLAIN bajo TLS nativo
libera/znc-production
Autoguardado Room DB
FenixIRC Pantalla de Edición de Servidor
Añadir Servidor (SSL: Off/On)
FenixIRC Formulario Avanzado de Parámetros de Red
Configuración SASL & Bouncer
SECCIÓN 02 / VIEWMODEL & PERSISTENCIA

Flujo de Negocio y Mapeo en el ViewModel (ServersViewModel.kt)

Cuando el usuario confirma los parámetros en la UI, el ViewModel orquesta una transición asíncrona respaldada por Kotlin Coroutines, actualiza la base de datos local SQLite/Room y emite un comando de conexión al actor de red singleton.

1
Persistencia Local Room Database DAO

Escritura ACID de ServerEntity

2
Despacho Reactivo IrcManager Event Stream

Emisión StateFlow a sesión activa

3
Aislamiento Criptográfico SSLSocketFactory Dispatch

Túnel seguro en puerto 6697

ServersViewModel.kt
fun connectServer(server: ServerEntity) {
    viewModelScope.launch(Dispatchers.IO) {
        // 1. Persistir cambios de estado y última conexión en Room
        serverDao.updateServer(server.copy(lastConnected = System.currentTimeMillis()))

        // 2. Transformar entidad Room en modelo de ejecución IrcConfig
        val config = IrcConfig(
            networkId       = server.id,
            host            = server.host,
            port            = if (server.useSsl) 6697 else server.port,
            useSsl          = server.useSsl,
            allowPlainText  = server.allowPlainText && !server.useSsl,
            saslCredentials = if (server.useSasl) SaslAuth(server.saslUser, server.saslPass) else null,
            bouncerSettings = if (server.useBouncer) BouncerNetwork(server.bouncerNetwork) else null,
            charset         = Charset.forName(server.encoding)
        )

        // 3. Despachar al motor singleton IrcManager para levantar el socket
        IrcManager.getInstance().initiateConnection(config)
    }
}
SECCIÓN 03 / MOTOR DE RED (IrcEngine.kt)

Protocolo de Conexión SSL/TLS en Puerto 6697

FenixIRC implementa TLS Implícito sobre el puerto estándar 6697 en lugar del comando diferido STARTTLS. Esto garantiza que la negociación criptográfica se complete de forma atómica antes de intercambiar cualquier byte del protocolo IRC.

lock_reset 1. Handshake Directo e Inmediato

El Three-Way Handshake TCP es sucedido al instante por el TLS Client Hello. No existe ventana temporal de texto plano susceptible a ataques de intercepción RST o inyecciones de payloads intermedios.

Cero Exposición de Tráfico
key 2. Protección Cero-Días de Credenciales

Comandos fundacionales como CAP LS 302, PASS, NICK y AUTHENTICATE PLAIN viajan encapsulados dentro de tramas AES-GCM ya cifradas.

Túnel Seguro Pre-Handshake IRC
IrcEngine.kt · Instanciación SSLSocket Seguro
TCP_NODELAY + KeepAlive
private fun createSecureSocket(config: IrcConfig): Socket {
    return if (config.useSsl) {
        val sslFactory = SSLSocketFactory.getDefault() as SSLSocketFactory
        (sslFactory.createSocket() as SSLSocket).apply {
            // Habilitar exclusivamente TLSv1.2 y TLSv1.3
            enabledProtocols = arrayOf("TLSv1.3", "TLSv1.2")
            
            // Optimización de latencia y persistencia de paquetes
            tcpNoDelay = true
            keepAlive  = true
            soTimeout  = 15_000 // 15 segundos timeout de handshake y lectura

            // Conectar y activar verificación estricta de Subject Alternative Name (SAN)
            connect(InetSocketAddress(config.host, config.port), 15_000)
            startHandshake()
        }
    } else {
        if (!config.allowPlainText) throw SecurityException("Plaintext connection strictly blocked")
        Socket().apply { connect(InetSocketAddress(config.host, config.port), 15_000) }
    }
}
SECCIÓN 04 / CRIPTOGRAFÍA X.509

Validación de Certificados TLS y Rechazo de Conexiones No Seguras

FenixIRC rechaza rotundamente implementaciones vulnerables de TrustAllCertificates o bypasses de verificación de nombres. Se delega la validación de certificados al proveedor de seguridad del sistema operativo Android (TrustManagerFactory).

PASO 01 account_tree
Cadena de Confianza

El certificado del servidor debe derivar de una Autoridad Certificadora (CA) raíz preinstalada y auditada en el almacén oficial del sistema Android.

PASO 02 domain_verification
Validación SAN & Hostname

El campo Subject Alternative Name (SAN) del certificado X.509 debe coincidir de forma unívoca con el FQDN configurado en el campo server.host.

PASO 03 event_available
Vigencia Temporal Estricta

El instante Unix actual debe situarse taxativamente dentro del rango NotBefore y NotAfter estipulado por el emisor.

gpp_bad Política de Rechazo Inmediato ante Certificados Inválidos

Si el servidor remoto presenta un certificado autofirmado no registrado, un certificado caducado o un Subject CN divergente, FenixIRC aborta inmediatamente el hilo de ejecución socket y notifica en la consola de sesión:

[ERROR] Connection Failure: javax.net.ssl.SSLHandshakeException: Trust anchor for certification path not found / Domain mismatch (expected irc.libera.chat, found rogue.spoofed-server.net)
FenixIRC NO ofrece botones permisivos de 'Ignorar advertencia' para prevenir compromisos de red silenciosos.
SECCIÓN 05 / DEFENSA EN PROFUNDIDAD

Matriz de Mitigación de Ataques Man-in-the-Middle (MitM)

Comparativa directa entre el comportamiento de clientes IRC heredados sobre redes inseguras (Wi-Fi públicas, proxies maliciosos) y la postura criptográfica nativa de FenixIRC.

Vector de Ataque IRC Tradicional (Puerto 6667) Protección FenixIRC (TLS 1.3 / 6697)
Eavesdropping Escucha pasiva de paquetes de red Mensajes, canales privados y nicks legibles en texto plano mediante tcpdump o Wireshark. Payloads completamente cifrados con AES-256-GCM o ChaCha20-Poly1305. Secreto perfecto hacia adelante (PFS).
Robo de Credenciales NickServ / Operador / SASL Comandos /msg NickServ IDENTIFY pass transmitidos sin codificar en el router intermedio. Autenticación SASL PLAIN / ECDSA ejecutada exclusivamente dentro del túnel TLS establecido y validado.
Inyección Activa de Mensajes Spoofing de comandos /KICK o /BAN Posibilidad de inyectar comandos simulados del servidor mediante secuencias TCP desincronizadas. Autenticidad e integridad garantizadas por Message Authentication Codes (MAC / AEAD). Tramas alteradas son descartadas.
Ataques de Degradación STARTTLS Stripping El atacante bloquea el comando STARTTLS forzando al cliente a dialogar en texto plano. Inmune por diseño: FenixIRC no ofrece STARTTLS desprotegido. El socket es TLS nativo desde el byte inicial.
SECCIÓN 06 / LABORATORIO PRÁCTICO

Guía Paso a Paso: Configurar una Red Segura en FenixIRC

Sigue estos cinco pasos elementales dentro de la interfaz gráfica de FenixIRC para conectar cualquier red federada bajo máximas garantías criptográficas.

PASO 01 Abrir Edición

Toca el botón flotante + o mantén presionado un servidor existente en la lista principal.

PASO 02 Host y Puerto

Ingresa el dominio FQDN (ej. irc.libera.chat) y fija el puerto en 6697.

PASO 03 Activar SSL/TLS

Conmuta el interruptor Usar SSL/TLS a encendido. La casilla de texto plano se ocultará automáticamente.

PASO 04 Identidad SASL

Si posees cuenta registrada, activa Autenticación SASL con tu cuenta y token NickServ.

PASO 05 Guardar & Unirse

Presiona Guardar y toca sobre el servidor para iniciar la negociación del túnel en milisegundos.

terminal

Simulador Live de Handshake Criptográfico

Ejecuta una emulación de la pila TLS 1.3 de FenixIRC sobre diferentes servidores IRC reales.
Simulador Interactivo JS
Usar SSL/TLS
CONSOLE OUTPUT · SSLSocketEngine Log Stream LISTO PARA NEGOCIAR
// Presiona 'Iniciar Handshake' para desencadenar la resolución DNS y validación X.509...