2017-01-20 2 views
1

Recherche du meilleur algorithme pour prendre un fichier, le diviser en N parties, ajouter M parties de redondance, puis stocker le fichier dans N + M différents emplacements. Les fichiers sont généralement volumineux. Par exemple: un fichier de 1 Go peut être divisé en (32) parties de 32 Mo, avoir (8) parties additionnelles de 32 Mo et la structure redondante de 1,25 Go stockée sur 40 zones différentes. L'objectif serait de recréer le fichier à partir de toutes les parties valides (32). Un hachage indépendant des pièces originales (32) serait disponible pour vérifier la reconstruction correcte. Si cela est faisable, je crois que cela donnerait l'équivalent fonctionnel d'avoir 8 copies miroirs pour un surdébit de seulement 25% (plus le temps de calcul), n'est-ce pas? J'ai trouvé l'algorithme de Rabin de 1989 qui semble faire cela. Je me demandais si quelqu'un était au courant de quelque chose de mieux/plus vite?Comment diviser un fichier en N parties avec M parties redondantes de façon à ce que N des parties N + M soit suffisante pour le reconstituer?

Je reconnais que cela ressemble au fonctionnement du Raid 5 et du Raid 6 - en cherchant à adopter cette approche, en l'étendant à 8 blocs de parité et en l'exécutant au niveau du fichier.

+0

On dirait que vous parlez de [partage secret] (https://en.wikipedia.org/wiki/Secret_sharing), je pense que vous vouliez dire l'algorithme de Rabin? Y at-il quelque chose qui vous amène à croire que quelqu'un a amélioré cela? – jthill

+0

Avez-vous référé à cet article? http://web.engr.oregonstate.edu/~yavuza/Courses/Fall2014_AdvNetSec/ResearchPapers/RegularPapers/IDA.pdf –

+0

http://stackoverflow.com/questions/252555/how-does-cauchy-reed-solomon-algorithm Le travail semble pertinent. – rici

Répondre

1

La façon dont vous avez défini le problème est en effet appelée partage secret, mais des améliorations ont été apportées depuis 1989 - nous n'avons plus besoin de spécifier M à l'avance.

Maintenant, vous pouvez générer une séquence essentiellement illimitée de blocs pour un fichier et régénérer le fichier à partir de toute collection tant que leurs longueurs atteignent la longueur du fichier d'origine.

On l'appelle un "code de fontaine": https://en.wikipedia.org/wiki/Fountain_code. Les "codes de rapaces" sont les meilleurs aujourd'hui, je crois: https://en.wikipedia.org/wiki/Raptor_code. Ils ont été les premiers à fournir un codage et un décodage temporels linéaires. Notez que les codes de rapaces ne sont pas entièrement fiables - parfois vous devrez peut-être collecter un bloc supplémentaire - mais pour les cas d'utilisation qu'ils supportent, c'est un petit prix à payer pour le décodage de temps linéaire. Si vous avez besoin d'être absolument sûr que vous pouvez décoder le message étant donné le nombre minimal de blocs, alors j'ai trouvé ce partage secret en utilisant le théorème des restes chinois (décrit ici: https://en.wikipedia.org/wiki/Secret_sharing#Using_the_Chinese_remainder_theorem), mais en utilisant des polynômes irréductibles dans GF (2^N) au lieu des nombres entiers premiers, s'étend facilement dans un code de fontaine, mais nécessite (N^2) l'heure de coder et de décoder.

+0

Merci, en lisant ces liens maintenant. – Cassey

+0

Donc, ce lien: http://blog.notdot.net/2012/01/Damn-Cool-Algorithms-Fountain-Codes fournit un bon aperçu de haut niveau même si je pouvais comprendre. Sont leurs algorithmes de raptor du domaine public? Ou devrais-je m'en tenir au code LT décrit ici et éviter de marcher sur des brevets? La performance n'est pas ma principale préoccupation puisque l'utilisation dans ma demande peut être quotidienne, et non minute par minute. – Cassey

+0

RaptorQ est un code rapace standard de l'IETF utilisé de nos jours: https: //tools.ietf.org/html/rfc6330. Il existe de nombreuses implémentations gratuites, comme http://openrq-team.github.io/openrq/ et http://openrq-team.github.io/openrq/ –