web-dev-qa-db-fra.com

Existe-t-il un système de fichiers asymétriquement crypté?

Existe-t-il un système de fichiers fournissant un répertoire où tout le monde peut écrire, mais seul le propriétaire de l'annuaire peut lire les fichiers? En théorie, cela pourrait être fait en cryptant en utilisant la clé publique lors de l'écriture, mais je vois que c'est beaucoup plus compliqué que le cryptage de disque symétrique. Le but est de permettre à tout le monde d'avoir son propre répertoire où tout le monde peut mettre des fichiers dans, c'est-à-dire une sorte de système de messagerie sécurisé, juste au niveau du système de fichiers.

Personne (pas même root) mais le propriétaire doit être autorisé à lire les fichiers, de sorte que les droits d'accès ne vous aident pas. Supposons que le système soit sécurisé contre les Keyloggers, etc.

12
maaartinus

Un système de fichiers écriture uniquement est faisable, même cryptographiquement, mais il a peu de fonctionnalités supplémentaires sur ce que vous pouvez déjà faire avec, dire, gnupg .

Cela prendrait des efforts pour définir précisément ce que vous voulez. Il existe de nombreuses options comportementales:

  • Devrait-il être possible pour quelqu'un de voir Les fichiers métadonnées (nom, longueur, date de dernière modification ...)?
  • Si les fichiers peuvent être déposés, qui peuvent effacer et/ou les remplacer? Quelqu'un, uniquement le propriétaire de l'annuaire, ou le propriétaire et l'expéditeur de fichiers?
  • Devrait-il être possible de Ajouter Données à un fichier crypté?
  • Qu'en est-il des sous-répertoires?

Avoir le système sous forme de système de fichiers à pulsé de noyau, ce n'est aucun sens si vous souhaitez pouvoir écrire les fichiers via l'API normal pour les fichiers (open(), write()...), qui À son tour, contraint les réponses aux questions ci-dessus. Soutenir l'API normale est au profit des applications qui ignorent votre système de fichiers de cryptage automatique spécifique. D'autre part, si vous acceptez que les utilisateurs souhaitant déposer un fichier dans un tel répertoire devaient avoir à appeler une commande spécifique, il y a peu de raisons de mettre en œuvre la fonctionnalité du noyau. Une solution purement utilisatrice fonctionnerait également bien et probablement mieux depuis que la programmation UseLland a moins de contraintes que la programmation des noyaux. Une solution Userland existante existe déjà et s'appelle "e-mail", avec GNUPG.

De plus, si la racine est votre ennemi, alors vous êtes condamné. La racine est tout-puissant sur un système UNIX; Il peut changer le noyau alors qu'il voit en forme et activez donc un enregistreur clé ou obtenez simplement une copie de chaque octet qui est écrit dans un fichier. D'autre part, si la racine est non Un ennemi, puis des caractéristiques normales de sécurité non-crypto (par exemple, les droits d'accès au fichier) du système devraient suffire à appliquer la confidentialité des données; voir les autres réponses pour cela.

5
Thomas Pornin

avec cryptographie. Si vous ne souhaitez pas compter sur des autorisations de système de fichiers, vous pouvez résoudre ce problème directement avec le cryptage de clé publique.

Détails. Voici comment. RADIA, le destinataire de tous ces messages peut utiliser GPG pour créer un clavier de clé publique. Radia devrait ensuite communiquer sa clé publique à tout le monde: par exemple, elle pourrait stocker la clé publique dans certains dossiers en lecture seule que tout le monde peut lire. Les radia doivent stocker sa clé privée en toute sécurité dans un fichier que seule elle peut lire.

Pour envoyer un message, Alice peut importer la clé publique de Radia dans son fichier clé GPG, puis crypter son message à la clé publique de Radia à l'aide de GPG et envoyer le fichier crypté à RADIA. Peu importe comment le fichier crypté devient à la radia; Il pourrait être transmis par ClearText Email, stocké dans un répertoire mondial-écroué, ou tout autre support d'insécurité.

Pour recevoir le message, Radia peut utiliser GPG pour le déchiffrer (à l'aide de la clé privée de Radia).

Seuls les radiatiques seront en mesure de déchiffrer le message. Bob ne connaît pas la clé publique de Radia, alors même si Bob intercepte le fichier crypté, Bob ne peut pas lire le message que Alice essayait d'envoyer.

Discussion. C'est une application totalement simple de la cryptographie clés de la clé publique. Plutôt que de mettre en œuvre la crypto de clé publique vous-même, je vous recommande d'utiliser des logiciels de cryptage de fichiers très éprouvés sur temps. GPG vient fortement recommandé à cette fin. Vous pouvez également utiliser le produit commercial de PGP, si vous préférez payer de l'argent pour cela. S/MIME-Crypted Email serait également une implémentation parfaitement raisonnable. Cette solution n'exige aucun support particulier du système de fichiers; Au lieu de cela, la sécurité est mise en œuvre à la couche d'application.

CAVEZIER. root Pourra lire tous les fichiers et lire tous les messages. Vous avez dit que vous ne voulez pas cela. Cependant, ce que vous voulez est irréalisable. Sur tout système d'exploitation existant, si la racine est malveillante, la racine peut espionner tout ce que chaque utilisateur fait. (Vous avez dit "Supposons que le système est sécurisé contre les Keyloggers", mais il n'ya aucun moyen de le faire, si la racine est celle qui essaie de faire du keylogging.) Par conséquent, cela atteint vos objectifs dans la mesure où ils sont réalisables.

4
D.W.

Quelqu'un a mis en œuvre juste la chose (qui est un peu opposé à ce dont j'ai besoin ...)

http://www.arthy.org/wocfs/

WOCFS est un système de fichiers à base de fusible crypto-verrouillé. Vous pouvez écrire dans le mont Fuse, mais les fichiers si écrits ne peuvent pas être lus sans un outil séparé. Quelqu'un avec des privilèges suffisants peut supprimer ou déplacer les fichiers, mais sans l'outil, ils ne peuvent pas les lire/les éditer.

C'est utilisable, mais cela ne sera pas un brûleur de grange à la vitesse puisqu'il utilise le cryptage clé publique RSA pour coder avec. Pourrait être capable de le faire re-travaillait pour utiliser libsodium et accélérer considérablement.

2
Nobody of Import

Le seul moyen d'éviter la racine pouvant lire le contenu des fichiers s'ils voulaient vraiment être de les chiffrer localement sur votre propre système, téléchargez les versions cryptées sur le système que vous avez envisagé et que quiconque doit les lire télécharger les et les déchiffrer localement. De cette façon, aucune touche n'est jamais présente sur le système à laquelle cette racine tierce a accès afin que le problème de la lecture des fichiers devienne l'une des craquements selon l'algorithme de cryptage que vous choisissez. En supposant que l'algorithme soit sécurisé et que les clés sont suffisamment complexes et complexes, cela signifie être une attaque de force brute qui prendrait trop de temps pour être réalisable.

0
Mr. C

Ceci est une autre question similaire: https://serverfault.com/questions/89126

Où un sysadmin a voulu un cryptage à sens unique de journaux de serveur spécifiques. Comme indiqué là-bas, lisez que les avertissements de projet, mais contrairement à cet établissement, voici un Démarrage rapide pour votre scénario d'utilisation décrit.

  • Connectez-vous au compte d'utilisateur qui cryptera des fichiers.

  • Importer la clé publique de votre fichier "propriétaire" et utilisez leur email associé dans la commande suivante pour le Var_gpg_id variable.

Définissez des variables personnalisées pour la lisibilité de ce comment

Var_gpg_id='[email protected]'
Var_script_ower="${USER}"
Var_script_group="${USER}"
Var_gpg_file_ower="${USER}"
Var_gpg_file_group="${USER}"
Var_output_file="${HOME}/.secrets/gpg_messages.gpg"
Var_output_dir="${HOME}/.secrets/gpg_messages.gpg"
Var_named_pipe_location="${HOME}/Share/encryption_wormhole.pipe"
Var_script_copy_location="${HOME}/.secrets/wormhole_${USER}_pipe_listener.sh"

Script clone et aide imprimée

git clone https://github.com/S0AndS0/Perinoid_Pipes
cd Perinoid_Pipes
Perinoid_Pipes.sh -h

Exécuter un script avec --help Pour vérifier les paramètres

Perinoid_Pipes --copy-save-yn='yes'\
 --copy-save-name="${Var_script_copy_location}"\
 --copy-save-ownership="${Var_script_ower}:${Var_script_group}"\
 --copy-save-permissions='100'\
 --debug-level='6'\
 --listener-quit-string='sOmErAnDoM_sTrInG_wItHoUt_SpAcEs_tHaT_iS_nOt_NoRmAlY_rEaD'\
 --log-level='0'\
 --named-pipe-name="${Var_named_pipe_location}"\
 --named-pipe-ownership="${Var_gpg_file_ower}:${Var_gpg_file_group}"'\
 --named-pipe-permissions='420'\
 --output-bulk-dir="${Var_output_file}"\
 --output-parse-name="${Var_output_file}"\
 --output-parse-recipient="${Var_gpg_id}"\
 --output-rotate-actions='compress-encrypt,remove-old'\
 --output-rotate-check-requency='2500000'\
 --output-rotate-max-bites='8388608'\
 --output-rotate-recipient="${Var_gpg_id}"\
 --output-rotate-yn='no'\
 --output-save-yn='yes'\
 --disown-yn='yes' --help

Ajustez ce qui précède aux besoins correspondants pour l'utilisateur, supprimer --help Lorsque vous êtes prêt à écrire une copie de script, puis ajoutez quelque chose de similaire à celui de son .bashrc déposer.

cat >> ${HOME}/.bashrc <<EOF
if [ -e "${Var_script_copy_location}" ]; then
    if ! [ -p "${Var_named_pipe_location}" ]; then
        echo "# Starting ${Var_script_copy_location}"
        ${Var_script_copy_location} || echo "## Failed!"
    else
        echo "# Detected [${Var_script_copy_location}] already running"
        echo "# ${USER} may write to [${Var_named_pipe_location}] for auto encryption."
    if
else
        echo "## Could not start ${Var_script_copy_location}"
fi
EOF

Le résultat final est que lorsque vous vous connectez sous cet utilisateur, le fichier de démarrage Bash sera lu et l'état du fichier de tuyau nommé sera vérifié, s'il n'existe pas, la copie du script sera remplie pour le remaker. Lorsque des chemins de fichiers ou de répertoires connus sont écrits sur le tuyau nommé (echo "${HOME}/Downloads" > ${Var_named_pipe_location}) La copie du script devrait déposer des résultats compressés et cryptés dans le répertoire spécifié par ${Var_output_dir} variable. Et des messages ou des données aléatoires écrites sur le tuyau nommé seront annexés au fichier spécifié par ${Var_output_file} variable.

Remarque Pour permettre à quiconque d'écrire sur le tuyau nommé que vous souhaiterez peut-être définir le --named-pipe-permissions='420'\ Option à 422 Mais essayez-le avec les autorisations les plus restrictives montrées d'abord en permettant à quiconque de tirer l'entropie système comme celle-ci peut être dangereuse.

0
S0AndS0