Estoy creando un código abierto distribuido (y parcialmente replicado sin conexión, ya que se supone que la red será inestable) CMS y uno de los "trabajos" del sistema central será agrupar todos los archivos y generar un hash único desde ellos.
Este hash especial se comparará con un hash genuino para ver si coinciden, para garantizar que nadie modifique maliciosamente la fuente.
Si ambas coincidencias hash podemos continuar con el proceso de manera segura y, en particular, la replicación, si no se encuentra ninguna coincidencia, obtenemos la ip / proxy / tor-node y bloqueamos los intentos de unión posteriores.
Ok, vamos a agregar algo de contexto ...
Supongamos que tenemos una carpeta llamada 'cmsfiles' y dentro tenemos los archivos: app.py, dbconn.py, users.py, reputación.py, node_list.py, blacklist.py etc ..
Está John, el fundador de un portal llamado "Breaking old News". Tiene un hash genuino ("hash original") y se encuentra en la "lista de nodos", por lo que es un punto de referencia en el que se debe verificar.
Ahora, viene Dan, quien está interesado en el portal quiere unirse a él por su participación (ya sea discusiones o cualquier otra cosa) ... así que descarga e instala (deja que sea Python + Sharded Sqlite DB) el software sugerido por el portal de solo lectura.
Ahora, cuando vuelve a visitar el portal, se muestra un mensaje que dice algo como "Verificamos la integridad antes de alinear ambas máquinas, mantengámonos firmes y esperemos" ... lo que sucede en segundo plano es que se contactan las máquinas de John (de la lista de direcciones de lista de nodos) que luego procede a agrupar todos los archivos de la máquina de Dan en 'cmsfiles' a un solo hash y coteja con el genuino. La base de datos se descarga / actualiza y así sigue el "tren" de John.
Pasan 2 días desde que Dan se unió ...
Otro tipo llamado "Jack" aparece, pero con intenciones maliciosas, ya que modificó el archivo "reputación.py" para superar la limitación de 120 puntos para votar.
Él ve lo mismo que Dan, pero en el fondo sucede algo diferente ...
Cuando la máquina de John o Dan comprueba el hash, descubren que no coincide con el solicitante, por lo que la máquina de John o la de Dan proceden a expulsarlo de la red al ponerlo en la lista "lista negra.py".
nota: si Jack cambiara las direcciones en la lista manualmente para intentar validar su máquina, estaría solo y habría creado su propio portal sin ningún daño a los otros portales que ya existen
De lo que no estoy seguro es de si esto puede considerarse un sistema seguro y de que nadie puede falsificar / evitar el hash de alguna manera. ¿O tal vez si lo hago mal y debería hacerse de otra manera?
p.s. En parte se inspiró en el trabajo interno de Bitcoin y Osiris sps.