{"id":28642114,"url":"https://github.com/antonvlnc/pf_crypto","last_synced_at":"2026-03-10T10:02:38.888Z","repository":{"id":296437041,"uuid":"980234620","full_name":"antonvlnc/PF_CRYPTO","owner":"antonvlnc","description":"Prácticas de laboratorio - Criptografía","archived":false,"fork":false,"pushed_at":"2025-06-01T05:14:42.000Z","size":58,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-12T22:08:18.792Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/antonvlnc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-08T19:43:10.000Z","updated_at":"2025-06-01T05:14:45.000Z","dependencies_parsed_at":"2025-05-31T01:54:54.503Z","dependency_job_id":"ba19dfd8-22c7-4686-bf3b-9a0fd6a4b541","html_url":"https://github.com/antonvlnc/PF_CRYPTO","commit_stats":null,"previous_names":["antonvlnc/pf_crypto"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/antonvlnc/PF_CRYPTO","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antonvlnc%2FPF_CRYPTO","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antonvlnc%2FPF_CRYPTO/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antonvlnc%2FPF_CRYPTO/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antonvlnc%2FPF_CRYPTO/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/antonvlnc","download_url":"https://codeload.github.com/antonvlnc/PF_CRYPTO/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antonvlnc%2FPF_CRYPTO/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30329697,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T05:25:20.737Z","status":"ssl_error","status_checked_at":"2026-03-10T05:25:17.430Z","response_time":106,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-12T22:08:14.003Z","updated_at":"2026-03-10T10:02:38.836Z","avatar_url":"https://github.com/antonvlnc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PF_CRYPTO - Secure Communication Protocol Implementation\n\n**Proyecto de Criptografía - Semestre 2025-2**\n\nEste proyecto implementa un protocolo seguro de comunicación entre un **dispositivo con recursos limitados** (como un smartwatch) y un **servidor de aplicaciones**, con el apoyo de una **Autoridad de Registro (RA)** como tercera parte confiable. Se garantiza la **confidencialidad, autenticidad e integridad** de los mensajes.\n\n---\n\n##  Objetivo\n\nDiseñar e implementar un protocolo de comunicación segura que permita:\n\n- Registro de dispositivos mediante RA.\n- Autenticación mutua entre dispositivo y servidor.\n- Intercambio seguro de clave de sesión (ECDH).\n- Comunicación cifrada y autenticada (AES-GCM).\n\n---\n\n##  Componentes del Proyecto\n\n- `app.py`: Interfaz gráfica (GUI) para iniciar servidor y cliente, con logs visuales.\n- `ra.py`: Simulación de la Autoridad de Registro (RA), generación/carga de claves RSA.\n- `device.py`: Clase del dispositivo (generación de nonce, firma, verificación).\n- `server.py`: Clase del servidor (registro, autenticación, generación de reto y firma).\n- `device_client.py`: Cliente TCP del dispositivo. Ejecuta todas las fases del protocolo.\n- `server_host.py`: Servidor TCP. Controla autenticación y comunicación segura.\n- `protocol.py`: Funciones criptográficas para ECDH, AES-GCM, hashing, codificación.\n- `tests.py`: Pruebas unitarias para ataques y validación de la seguridad del protocolo.\n\n---\n\n##  Requisitos\n\n- **Python 3.8+**\n- Librería externa: [`cryptography`](https://pypi.org/project/cryptography/)\n\n### Instalación\n\n```bash\npip install cryptography\n```\n\n\u003eRecomendado: usar un entorno virtual\n\n```bash\npython -m venv venv\nsource venv/bin/activate   # Linux/Mac\nvenv\\Scripts\\activate      # Windows\npip install cryptography\n```\n\n---\n\n## Ejecución del Proyecto\n\n### 1. Ejecutar la interfaz gráfica\n\n```bash\npython app.py\n```\n\n### 2. Usar la GUI\n\n1. Presiona ** Iniciar Servidor** (lanza `server_host.py`)\n2. Presiona ** Ejecutar Cliente** (lanza `device_client.py`)\n3. Observa los logs de conexión, autenticación, cifrado y comunicación.\n4. Puedes presionar ** Limpiar Logs** para limpiar la consola.\n\n---\n\n##  Flujo del Protocolo\n\n1. **Registro (simulado)**:\n   - RA otorga un `device_id`, una clave privada y pública RSA al dispositivo.\n   - RA registra la clave pública del dispositivo en el servidor.\n\n2. **Inicio de conexión**:\n   - El dispositivo se conecta al servidor TCP y envía su ID.\n\n3. **Reto y autenticación mutua**:\n   - El servidor envía un nonce.\n   - El dispositivo responde con:\n     - Su propio nonce.\n     - Clave pública EC.\n     - Firma (nonce del servidor + su nonce + clave EC) usando RSA.\n   - El servidor verifica, y a su vez firma (nonce del dispositivo + clave EC del servidor).\n\n4. **Intercambio de claves (ECDH)**:\n   - Ambos generan una clave simétrica compartida.\n\n5. **Comunicación cifrada (AES-GCM)**:\n   - El dispositivo envía un mensaje cifrado con autenticación.\n   - El servidor responde también cifrado.\n\n---\n\n##  Criptografía utilizada\n\n-  **RSA-2048** para autenticación y firmas.\n-  **ECDH (secp256r1)** para derivar clave compartida.\n-  **AES-GCM** (clave de 256 bits) para cifrado autenticado.\n-  **SHA-256** como función hash base.\n\n---\n\n##  Pruebas de seguridad\n\nEjecuta:\n\n```bash\npython tests.py\n```\n\nIncluye:\n\n1. **Replay Attack** → Detección de nonce repetido\n2. **Impersonation Attack** → Suplantación de identidad con clave falsa\n3. **Message Tampering** → Alteración de clave pública\n4. **Verificación de intercambio ECDH** → Validación de clave compartida\n5. **ID no registrado** → Rechazo de ID no autorizado\n\n---\n\n##  Archivos generados\n\nEstos archivos son creados automáticamente si no existen:\n\n- `device_private.pem`: Clave privada RSA del dispositivo.\n- `server_private.pem`: Clave privada RSA del servidor.\n\n\u003e Si deseas reiniciar el sistema, elimina estos archivos para forzar la regeneración.\n\n---\n\n##  Demostración esperada\n\nLa ejecución completa del protocolo debe mostrar en consola:\n\n- Registro e identificación del dispositivo.\n- Intercambio de nonces.\n- Verificación de firmas (RSA).\n- Intercambio ECDH.\n- Comunicación cifrada (AES-GCM).\n- Confirmación de integridad.\n\n[/link video](https://drive.google.com/file/d/1mtx1lRy4dHx5Ob6DRXDbbSr_yW3MdaWk/view)\n\n---\n\n##  Autores\n\nEquipo del proyecto – Criptografía 2025-2:\n\n- Arellano Hernández Israel\n- Toledo Valencia Jesús Antonio  \n- Vallejo Escamilla Oscar Daniel  \n- Arredondo Granados Gerardo  \n- García Hernández Diego Aldair  \n\n---\n\n##  Licencia\n\nProyecto académico con fines educativos. Uso libre para fines de estudio.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantonvlnc%2Fpf_crypto","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fantonvlnc%2Fpf_crypto","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantonvlnc%2Fpf_crypto/lists"}