# Tutorial de P2P Sync de Noterich: Sincronización entre dispositivos sin necesidad de cloud > **Sincroniza tus notas entre dispositivos de forma segura — sin necesidad de almacenamiento en cloud.** En una era en la que la privacidad de los datos es más importante que nunca, Noterich ofrece un enfoque revolucionario para la sincronización entre dispositivos. Nuestra función **P2P (Peer-to-Peer) Sync** permite compartir notas sin problemas entre tus dispositivos, sin depender de servidores en cloud. Tus datos permanecen tuyos — siempre. ## ¿Por qué elegir P2P Sync? Las aplicaciones tradicionales para tomar notas almacenan tus datos en servidores centralizados. Esto crea riesgos potenciales para la privacidad, costos de suscripción y dependencia de infraestructuras de terceros. Noterich toma un camino diferente: ```mermaid graph LR A[Tu Dispositivo] <-->|Conexión Directa| B[Tu Otro Dispositivo] C[Servidor en Cloud] -.->|No Es Requerido| A C -.->|No Es Requerido| B style A fill:#4CAF50,color:#fff style B fill:#4CAF50,color:#fff style C fill:#9E9E9E,color:#fff,stroke-dasharray: 5 5 ``` ### Beneficios clave - **🔒 Privacidad primero**: Tus notas nunca entran en servidores de terceros - **⚡ Rápido y directo**: Los dispositivos se comunican directamente para una sincronización más rápida - **💰 Sin suscripción**: Sincronización P2P gratuita, sin tarifas premium - **🌐 Funciona en cualquier lugar**: Sincronización a través de red local o internet - **📱 Plataforma cruzada**: Funciona entre escritorio, portátil, tableta y móvil ## Cómo funciona P2P Sync Noterich utiliza **tecnología WebRTC** combinada con **PeerJS** para establecer conexiones directas entre tus dispositivos. Cuando inicias una sincronización: ```mermaid sequenceDiagram participant D1 como Dispositivo A (Emisor) participant S como Servidor de Señalización participant D2 como Dispositivo B (Receptor) D1->>S: Solicitar conexión ID S-->>D1: Generar ID de sala D1->>D2: Compartir enlace de conexión (QR/URL) D2->>S: Conectarse usando ID de sala S-->>D2: Establecer conexión peer D1->>D2: Encriptar y enviar notas D2->>D2: Desencriptar e importar notas Nota sobre D1,D2: Transferencia encriptada directa<br/>No se almacena datos en el servidor ``` ### La tecnología detrás de escena La implementación P2P de Noterich aprovecha: 1. **Biblioteca PeerJS**: maneja la complejidad de WebRTC para la comunicación entre navegadores 2. **Encriptación AES-GCM**: Encriptación de nivel militar para tus datos de notas 3. **Derivación de Claves PBKDF2**: Generación segura de claves de encriptación basadas en contraseñas 4. **Serialización MessagePack**: Codificación binaria eficiente para transferencias rápidas 5. **Almacenamiento IndexedDB**: Base de datos local primero para acceso sin conexión ## Primeros pasos con P2P Sync ### Requisitos previos Antes de comenzar, asegúrate de tener: - ✅ Noterich instalado en ambos dispositivos - ✅ Ambos dispositivos conectados a internet (o en la misma red local) - ✅ Un navegador web moderno (Chrome, Firefox, Edge, Safari) ### Paso 1: Iniciar el compartir desde el dispositivo original 1. Abre la nota que deseas compartir en Noterich 2. Haz clic en el botón **Compartir** en la barra de herramientas 3. Selecciona la opción **"P2P Compartir"** 4. (Opcional) Establece una contraseña para mayor seguridad - Las contraseñas deben tener al menos 8 caracteres - Utiliza encriptación AES-256-GCM 5. Espera a que el servidor P2P se inicialice ```mermaid graph TD A[Abrir Nota] --> B[Hacer clic en Botón Compartir] B --> C[Seleccionar P2P Compartir] C --> D{Establecer Contraseña?} D -->|Sí| E[Ingresar Contraseña ≥8 caracteres] D -->|No| F[Omitir Encriptación] E --> G[Inicializar Servidor P2P] F --> G G --> H[Generar Enlace de Compartir y Código QR] ``` ### Paso 2: Compartir el enlace de conexión Una vez que el servidor P2P comienza, Noterich genera: - **Un enlace de compartir único** que contiene parámetros de conexión - **Un código QR** para escaneo rápido en dispositivos móviles El formato del enlace es como: ``` https://noterich.com/#dbshare=<infoHash>&server=<signaling-server> ``` **Métodos de compartir:** | Método | Ideal para | Cómo hacerlo | |--------|----------|--------| | 🔗 Copiar enlace | Correo electrónico, aplicaciones de mensajería | Hacer clic en "Copiar enlace" | | 📱 Código QR | Dispositivos móviles | Escanear con la cámara del dispositivo | | 📧 Correo electrónico | Colaboradores remotos | Pegar el enlace en el correo | ### Paso 3: Recibir en el dispositivo de destino En el dispositivo receptor: 1. **Abrir el enlace de compartir** - Hacer clic directamente en el enlace, O - Escanear el código QR con su dispositivo móvil 2. **Revisar las notas recibidas** - Previsualizar títulos de notas y metadatos - Verificar la información del emisor 3. **Ingresar la contraseña** (si está encriptada) - Introducir la contraseña proporcionada por el emisor - Los datos se desencriptan localmente en tu dispositivo 4. **Elegir el espacio de trabajo de destino** - Escoger un espacio de trabajo existente, O - Crear un nuevo espacio de trabajo para las notas importadas 5. **Confirmar la importación** - Las notas se desencriptan y se guardan en IndexedDB - El índice de búsqueda se reconstruye automáticamente ```mermaid graph LR A[Abrir Enlace] --> B[Conectarse con el Emisor] B --> C{Encriptado?} C -->|Sí| D[Ingresar Contraseña] C -->|No| E[Recibir Metadatos] D --> E E --> F[Previsualizar Notas] F --> G[Elegir Espacio de Trabajo] G --> H[Importar y Índice] H --> I[Sincronización Completa!] style I fill:#4CAF50,color:#fff ``` ## Funciones avanzadas ### Transferencias encriptadas Para notas sensibles, Noterich ofrece encriptación end-to-end opcional: **Proceso de encriptación:** ```javascript // Contraseña → Clave de encriptación (PBKDF2) password + salta → derivarKey() → Clave AES-256-GCM // Datos de nota → Buffer encriptado notaData + clave + iv → encriptar() → encryptedBuffer // Paquete de transferencia { encryptedBuffer: ArrayBuffer, salta: Uint8Array, // Para la derivación de la clave iv: Uint8Array // Vector de inicialización } ``` **Funciones de seguridad:** - 🔐 100,000 iteraciones de PBKDF2 para la derivación de la clave - 🔐 Salta y IV aleatorios para cada transferencia - 🔐 Encriptación autenticada AES-256-GCM - 🔐 La contraseña nunca se transmite — solo se utiliza localmente ### Sincronización de notas por lotes Transferir múltiples notas de manera eficiente: 1. Acceder a **Transferir Base de Datos** desde la configuración 2. Seleccionar el modo **"P2P Sync"** 3. Elegir las notas a sincronizar 4. El receptor recibe una vista previa de lotes con opciones de selección **Optimización de rendimiento:** - Las notas se transfieren en bloques (512KB cada uno) - Procesamiento asíncrono sin bloqueos de la IU - Seguimiento del progreso con precisión byte a byte - Cancelar en cualquier momento sin dañar datos ### Resolución de conflictos Cuando se sincronizan notas que existen en ambos dispositivos: ```mermaid graph TD A[Detectar Conflicto] --> B{Comparar Tiempo de Creación} B -->|Más Reciente Local| C[Guardar Versión Local] B -->|Más Reciente Remoto| D[Mostrar Diálogo de Conflicto] D --> E[Elegir Versión] E --> F[Local] E --> G[Remoto] E --> H[Mergir Manualmente] B -->|Ambos Eliminados| I[Omitir] style C fill:#2196F3,color:#fff style F fill:#2196F3,color:#fff style G fill:#4CAF50,color:#fff ``` **Tipos de conflictos manejados:** - `local-más reciente`: Tu versión es más reciente - `remoto-más reciente`: La versión entrante es más nueva - `local-eliminado`: Eliminaste esta nota localmente - `remoto-eliminado`: La nota fue eliminada en el dispositivo del emisor - `remoto-restaurado`: Nota eliminada anteriormente restaurada ## Solución de problemas ### Problemas comunes y soluciones #### ❌ "Biblioteca PeerJS no cargada" **Causa**: Bloqueo de la red por parte del CDN de PeerJS o del servidor de señalización **Soluciones:** 1. Comprobar la conexión a internet 2. Verificar que el firewall permite conexiones WebRTC 3. Intentar una red alternativa ( hotspot móvil ) 4. Asegurarse de que el navegador soporta WebRTC #### ❌ "Tiempo de conexión</sup> timeout</sup> **Causa**: NAT/firewall que impide la conexión directa **Soluciones:** 1. Ambos dispositivos en la misma red ayuda 2. Desactivar VPN temporalmente 3. Comprobar los ajustes de WebRTC del router 4. Usar código QR para conexiones móviles #### ❌ "Desencriptación falló</sup> timeout</sup> **Causa**: Contraseña incorrecta o transferencia dañada **Soluciones:** 1. Verificar que la contraseña coincide exactamente (con sensibilidad a mayúsculas/minúsculas) 2. Solicitar un nuevo enlace de compartir del emisor 3. Asegurarse de que haya una conexión estable durante la transferencia 4. Intentar tamaños de lote más pequeños #### ❌ Error "Sincronización en progreso"</sup> timeout</sup> **Causa**: Múltiples intentos de sincronización simultáneos **Soluciones:** 1. Esperar a que la sincronización actual se complete 2. Cerrar otras pestañas/windows de Noterich 3. Actualizar la página y intentar de nuevo 4. Borrar la caché del navegador si persiste ### Indicadores de estado de conexión | Estado | Significado | Acción | |--------|---------|--------| | 🔵 Conectándose | Estableciendo conexión peer | Esperar 5-10 segundos | | 🟡 Comparando | Analizando diferencias de notas | Proceso normal | | 🟠 Esperando a usuario | Se necesita contraseña o confirmación | Verificar diálogos | | 🟢 Aplicando | Importando notas a la base de datos | No cerrar la pestaña | | ✅ Éxito | Sincronización completada con éxito | Listo para usar las notas | | 🔴 Error | Conexión o transferencia falló | Verificar solución de problemas | ## Prácticas de seguridad recomendadas ### Protegiendo tus datos Aunque la sincronización P2P es intrínsecamente segura, sigue estas pautas: 1. **Usa contraseñas fuertes** - Al menos 8 caracteres (recomendado 12+) - Mezcla mayúsculas, minúsculas, números y símbolos - Nunca reutiliza contraseñas de otras servicios 2. **Verifica receptores** - Compartir enlaces solo con dispositivos de confianza - Usar códigos QR para transferencias en cercanía física - Evitar publicar enlaces en canales públicos 3. **Monitorea conexiones activas** - Verifica peers conectados durante la sincronización - Desconecta después de una transferencia exitosa - Revoca enlaces compartidos si se comprometen 4. **Backups regulares** - Exportar notas importantes periódicamente - Guardar los backups en un lugar seguro - Probar las prácticas de restauración regularmente ### Entender los límites de encriptación **Lo que está encriptado:** - ✅ Contenido de la nota (texto, formato, metadatos) - ✅ Archivos adjuntos y medios incrustados - ✅ Estructura de la base de datos durante la transferencia **Lo que no está encriptado:** - ⚠️ Metadatos de conexión (tiempo, tamaño de datos) - ⚠️ Direcciones IP (visibles para el servidor de señalización) - ⚠️ Identificadores de dispositivo (para enrutamiento de conexión) ## Consejos de rendimiento ### Optimizar la velocidad de sincronización 1. **Condiciones de red** - Misma red local = transferencias más rápidas - WiFi 5GHz preferido sobre 2.4GHz - Ethernet para dispositivos de escritorio 2. **Tamaños de lote** - Transferencias grandes: Dividir en lotes más pequeños - Monitorear indicador de progreso - Cancelar y intentar de nuevo si se bloquea 3. **Rendimiento del navegador** - Mantener la pestaña de Noterich activa durante la sincronización - Cerrar pestañas de navegador innecesarias - Actualizar a la versión más reciente del navegador 4. **Recursos del dispositivo** - Asegurarse de tener suficiente espacio de almacenamiento - Cerrar aplicaciones que consuman mucha memoria - Reiniciar el navegador si la sincronización se ralentiza ### Gestión de memoria Noterich implementa procesamiento de lotes inteligente para evitar caídas del navegador: ```javascript // Procesamiento de lotes asíncrono con setTimeout async function asyncBatchProcessor(items, processor, batchSize = 10) { // Procesa los items en lotes de 10 // Proporciona control cada 10ms para mantener la UI receptiva // Evita bloqueos del hilo principal durante importaciones grandes } ``` **Recomendaciones:** - Limitar transferencias individuales a 100 notas máximo - Esperar 30 segundos entre sincronizaciones de gran tamaño - Borrar la caché del navegador periódicamente ## Preguntas frecuentes ### P: ¿Puedo sincronizar más de dos dispositivos? **R:** Sí. Inicia sesiones P2P separadas para cada par de dispositivos. Para flujos de trabajo multi-dispositivo: 1. Sincronizar Dispositivo A → Dispositivo B 2. Luego sincronizar Dispositivo B → Dispositivo C 3. O usar Dispositivo A como centro de conexión para todos los demás ### P: ¿La sincronización P2P funciona sin conexión a internet? **R:** La P2P requiere una conexión inicial a internet para el handshake del servidor de señalización. Después de establecer la conexión: - ✅ Transferencias en red local funcionan sin internet - ✅ Datos se transfieren directamente entre dispositivos - ❌ La conexión inicial necesita acceso al servidor de señalización ### P: ¿Qué pasa si la sincronización se interrumpe? **R:** Noterich maneja las interrupciones de manera inteligente: - Notas parcialmente transferidas se descartan - Ningún dato corrupto entra en tu base de datos - Simplemente reinicia el proceso de sincronización - Las notas ya sincronizadas no se afectan ### P: ¿Puedo sincronizar con una instancia de Noterich de otra persona? **R:** ¡Por supuesto! La sincronización P2P funciona entre usuarios de Noterich: - Compartir notas individuales con colaboradores - No se requiere vínculo de cuenta - Cada transferencia es independiente y segura - Perfecto para compartir notas de una sola vez ### P: ¿Hay un límite de tamaño de archivo? **R:** Los límites prácticos dependen de: - Disponibilidad de memoria del navegador - Estabilidad de la red - Recomendado máximo: 50MB por sesión - Transferencias más grandes: Dividir en múltiples lotes ### P: ¿Cuánto tiempo dura un enlace de compartir? **R:** Los enlaces de compartir son por sesión: - Válidos mientras la pestaña de Noterich del emisor permanezca abierta - Caduvan cuando el emisor cierra la pestaña/navegador - Se recomienda usarlos de una sola vez por seguridad - Generar un nuevo enlace para cada sesión de transferencia ## Comparación: P2P vs Sincronización en cloud ```mermaid quadrantChart title "Comparación de métodos de sincronización" x-axis "Menor privacidad" --> "Mayor privacidad" y-axis "Menor control" --> "Mayor control" quadrant-1 "Noterich P2P" quadrant-2 "Evitar" quadrant-3 "Sincronización tradicional en cloud" quadrant-4 "Servicios centralizados" "Noterich P2P": [0.9, 0.9] "Sincronización tradicional en cloud": [0.3, 0.4] "Servicios centralizados": [0.4, 0.3] ``` | Característica | Noterich P2P | Sincronización en cloud | |---------|--------------|--------------------------| | **Almacenamiento de datos** | Solo tus dispositivos | Servidores de terceros | | **Nivel de privacidad** | Máximo | Depende del proveedor | | **Costo** | Gratuito | A menudo con tarifas de suscripción | | **Complejidad de configuración** | Moderado | Simple | | **Velocidad de sincronización** | Muy rápido (directo) | Medio (a través de servidor) | | **Acceso sin conexión** | Total | Limitado | | **Anclaje a proveedores** | Ninguno | Alto | | **Portabilidad de datos** | Completa | Restringida | ## Casos de uso reales ### 📚 Base de conocimientos personales Sincroniza tu sistema de gestión de conocimientos personales (PKM) en: - Escritorio para trabajo profundo - Portátil para sesiones en cafeterías - Tableta para lectura y anotaciones - Teléfono para capturas rápidas ### 👥 Colaboración en equipo Comparte notas de investigación de manera segura dentro del equipo: - No se requiere infraestructura de TI - Transferencias encriptadas end-to-end - Historial de auditoría a través de registros de transferencia - Cumpliendo con regulaciones de privacidad ### 🎓 Investigación académica Colabore en artículos y reseñas de literatura: - Comparta PDFs y notas anotadas - Mantener un historial de versiones local - Trabajar entre dispositivos universitarios/personales - Proteger investigaciones inéditas ### 🏢 Implementación empresarial Implemente Noterich en organizaciones que valoran la privacidad: - Ningún dato sale de la red de la empresa - Funciona detrás de cortafuegos con configuración - Se integra con políticas de seguridad existentes - Reduce la dependencia de servicios en cloud ## Análisis técnico (Para desarrolladores) ### Visión general de la arquitectura ```mermaid graph TB subgraph Sender["Dispositivo Emisor"] A1[Datos de nota] --> A2[Serializar con MessagePack] A2 --> A3{Encriptado?} A3 -->|Sí| A4[Encriptar AES-256-GCM] A3 -->|No| A5[Binario claro] A4 --> A6[Fragmentar en 512KB] A5 --> A6 A6 --> A7[Canal de datos WebRTC] end subgraph Receptor["Dispositivo Receptor"] B1[Canal de datos WebRTC] --> B2[Reasentar fragmentos] B2 --> B3{Encriptado?} B3 -->|Sí| B4[Desencriptar AES-256-GCM] B3 -->|No| B5[Binario claro] B4 --> B6[Desserializar MessagePack] B5 --> B6 B6 --> B7[Almacenamiento IndexedDB] B7 --> B8[Reconstruir índice de búsqueda] end A7 -.->|Conexión P2P directa| B1 style A4 fill:#FF5722,color:#fff style B4 fill:#FF5722,color:#fff style A7 fill:#4CAF50,color:#fff style B1 fill:#4CAF50,color:#fff ``` ### Detalles clave de implementación **Configuración del servidor de señalización:** ```javascript const peerConfig = { host: 'www.noterich.com', port: 443, secure: true, key: 'peerjs' }; ``` **Flujo de encriptación:** 1. Generar salta aleatorio (16 bytes) 2. Generar IV aleatorio (12 bytes) 3. Derivar clave usando PBKDF2 (100k iteraciones) 4. Encriptar con AES-256-GCM 5. Paquete: `{encryptedBuffer, salta, IV}` **Protocolo de transferencia de datos:** ```javascript // Tipos de mensaje manejados: { tipo: 'metadatos', payload: {...} } // Lista de notas { tipo: 'fragmento-nota', payload: {...} } // Fragmento de datos de nota { tipo: 'progreso', payload: {...} } // Progreso de transferencia { tipo: 'completado', payload: {...} } // Transferencia completada { tipo: 'cancelar-sincronización-request' } // Solicitud de cancelación de sincronización { tipo: 'error', mensaje: '...' } // Reporte de error ```