DiskImages ou hdiutil pour gérer images disques AES

elfelf Membre
14:43 modifié dans API AppKit #1
Bonjour,

J'ai besoin pour mon app de pourvoir créer des images disques cryptées en AES.
J'ai essayer de voir si avec le framework DiskImages ça pouvais aller mais il est privé donc pas de headers.
Est-ce qu'il y a un framework qui peut faire ça?

J'ai aussi vu que il y avais un tool: hdiutil qui pouvais faire ça et j'ai bien essayé de l'utiliser depuis le terminal mais j'arrive a rien... quelqu'un pourrais me donner des indication sur comment faire ce que je veux faire, en Obj-C/Cocoa bien sûr...

Ou toute autre manière d'arriver a mes fins me conviendrais aussi, donc si quelqu'un a une idée qu'il ne la garde pas pour lui mais qu'il me le dit... :D

Merci a toute personne pouvant m'éclairer
Seo'

Réponses

  • Eddy58Eddy58 Membre
    octobre 2005 modifié #2
    Tu peux toujours regarder du côté du sample code CryptoSample pour t'inspirer et l'appliquer sur tes images disques, mais c'est du C++ : :)
    http://developer.apple.com/referencelibrary/Security/idxCocoa-date.html#doclist
  • elfelf Membre
    14:43 modifié #3
    La fonction de cryptage est déjà  intégré au framework DiskImages et donc à  hdiutil mais je ne sais pas comment l'utiliser...
  • veveveve Membre
    14:43 modifié #4
    Tu pourrais utiliser class-dump http://www.codethecode.com/Projects/class-dump pour générer un fichier d'en-tête. mais tu devras te debrouiller sans doc.
  • elfelf Membre
    14:43 modifié #5
    Donc si j'ai bien compris d'après la liste des features ça me servirais a retrouver les headers de DiskImages ?
  • elfelf Membre
    14:43 modifié #6
    En fait il y a que une classe (DIHelperProxy) sinon c'est tout des catég ou des protocoles, et il y a rien en rapport direct (genre création) avec les images disques, je vais envoier un mail aux développeur de FreeDMG pour leur demender comment ils ont fait.
  • BruBru Membre
    14:43 modifié #7
    C'est vraiment pas compliqué d'utiliser hdiutil, et ça l'est encore moins depuis un prog cocoa :

    <br />{<br />    NSTask *hdiutil;<br />    NSString *cheminDmg, *nomVolume;<br />    NSNumber *tailleDmg;<br /><br />    cheminDmg=@&quot;/image.dmg&quot;; // chemin et nom de l&#39;image à  créer.<br />    nomVolume=@&quot;seoxys&quot;; // nom du volume contenu dans l&#39;image.<br />    tailleDmg=[NSNumber numberWithInt:2]; // taille de l&#39;image en mo.<br /><br />    hdiutil=[[NSTask alloc] init];<br />    [hdiutil setLaunchPath:@&quot;/usr/bin/hdiutil&quot;];<br />    [hdiutil setArguments:[NSArray arrayWithObjects:<br />         @&quot;create&quot;,<br />         @&quot;-size&quot;, [NSString stringWithFormat:@&quot;%@m&quot;, tailleDmg],<br />         @&quot;-fs&quot;, @&quot;HFS+&quot;,<br />         @&quot;-encryption&quot;, @&quot;CEncryptedEncoding&quot;,<br />         @&quot;-volname&quot;, nomVolume,<br />         @&quot;-quiet&quot;,<br />         cheminDmg, nil]];<br />    [hdiutil launch];<br />    [hdiutil release];<br />}<br />
    


    .
  • elfelf Membre
    14:43 modifié #8
    J'ai eu une discution intérésente avec le développeur de FreeDMG qui m'a beaucoups aidé... merci pour ton code bru, par contre je ne vois pas ou tu met un mot de passe à  l'encodage AES?
  • BruBru Membre
    14:43 modifié #9
    dans 1130356072:

    J'ai eu une discution intérésente avec le développeur de FreeDMG qui m'a beaucoups aidé... merci pour ton code bru, par contre je ne vois pas ou tu met un mot de passe à  l'encodage AES?


    Au moment de la création de l'image, une fenêtre apparait pour demander la saisie du mot de passe.

    .
  • elfelf Membre
    14:43 modifié #10
    En fait je voudrais que ça soit mon application qui donne le mot de passe à  l'image et pas l'utilisateur, c'est possible ça?
  • fouffouf Membre
    octobre 2005 modifié #11
    Oui, tu utilises le code suivant :

    <br />NSSaintEsprit *stEsprit = [NSSaintEsprit leSeulEtLUnique]; // il n&#39;y a qu&#39;un instance par runtime,<br />//c&#39;est normal, ou va pas commencer à  faire de initSaintEsprit: ou des [stEsprit release]; ...<br /><br />NSString *psswd = [stEsprit donnezMoiUnMotDePasse]; // le mot de passe<br /><br />NSDieu *dieu = [NSDieu monDieu]; // oui, là  aussi, qu&#39;une seule instance de dieu<br /><br />if([dieu motDePasseDuSaintEspritEstBon:passwd]){<br />&nbsp;  //lancer la création de l&#39;image avec hdiutil<br />}else{<br />&nbsp; NSLog(passwd);<br />}<br />
    


    Normalement, le code suivant devrait de retourner de temps en temps :

    SeoxyS, tu devrais générer un mot de passe aléatoirement en transformant des int en char puis en créant une NSString à  partir de ces caractères.


    Une sortie directe s'impose ==>[-]
  • Eddy58Eddy58 Membre
    14:43 modifié #12
    :P C'était de la pure dis-donc ce soir fouf ? ??? :fouf): :fouf):
  • 14:43 modifié #13
    dans 1130360211:

    En fait je voudrais que ça soit mon application qui donne le mot de passe à  l'image et pas l'utilisateur, c'est possible ça?


    Quand ça touche à  la sécurité, d'une règle générale, il faut considérer que les utilisateurs n'aiment pas les boites de dialogue non standard, et surtout aiment la transparence (souviens toi de LoginRM). Je dirais que tu peux éventuellement suggérer un mot de passe, mais surtout pas en imposer un.
  • BruBru Membre
    14:43 modifié #14
    dans 1130360211:

    En fait je voudrais que ça soit mon application qui donne le mot de passe à  l'image et pas l'utilisateur, c'est possible ça?


    Non.

    Sous OSX, les mécanismes de sécurité sont inclus dans le système (c'est donc lui qui demande s'il le faut les autorisations). C'est le prix de la sécurité.

    Le fait que ce soit toi qui gère les mots de passe dans ton appli est déjà  un gouffre de sécurité en soi.

    .
  • BruBru Membre
    14:43 modifié #15
    dans 1130396968:

    dans 1130360211:

    En fait je voudrais que ça soit mon application qui donne le mot de passe à  l'image et pas l'utilisateur, c'est possible ça?

    Non.


    En fait, la réponse est OUI.
    C'est un peu compliqué et ça demande à  être testé.

    Il faut ajouter à  la commande hdiutil l'option -stdinpass, et il faut envoyer sur stdin le mot de passe à  utiliser.

    Cela n'en reste pas moins une faille potentielle dans la sécurité de ton image.

    .
  • elfelf Membre
    octobre 2005 modifié #16
    en fait bru c'est oui mais ta solution est fausse...

    c'est l'option -passphrase qui le permet

    EDIT: j'ai eu toute mes réponse par le développeur de FreeDMG, donc merci a ceux qui ont bien voulu m'aider, mais j'ai trouvé.

    Sinon c'est pas que j'impose un mot de passe mais c'est que le mot de passe n'appartiens pas que à  l'image mais a tout un system...
  • fouffouf Membre
    14:43 modifié #17
    Si tu as trouvé, pourrais tu quand même nous donner la solution (les réponses du dév de FreeDMG) s'il te plait. Merci ;)
  • BruBru Membre
    14:43 modifié #18
    dans 1130435198:

    en fait bru c'est oui mais ta solution est fausse...
    c'est l'option -passphrase qui le permet


    C'est toi qui est dans le faux.

    Extrait de la doc hdiutil (terminal puis man hdiutil) :

      -stdinpass    read a null-terminated passphrase from standard input.  If
                        the standard input is a tty, the passphrase will be read
                        with readpassphrase(3).  -stdinpass replaces -passphrase
                        though the latter is still supported for compatibility.
                        Beware that the password will contain any newlines before
                        the NULL.  See the EXAMPLES section.


    .
  • AliGatorAliGator Membre, Modérateur
    14:43 modifié #19
    dans 1130435198:

    en fait bru c'est oui mais ta solution est fausse...

    c'est l'option -passphrase qui le permet

    EDIT: j'ai eu toute mes réponse par le développeur de FreeDMG, donc merci a ceux qui ont bien voulu m'aider, mais j'ai trouvé.

    Sinon c'est pas que j'impose un mot de passe mais c'est que le mot de passe n'appartiens pas que à  l'image mais a tout un system...
    Donc on est bien d'accord que c'est un joli trou de sécurité que tu introduis dans ton appli...
    Il suffit de rerouter le stdout pour qu'il ne soit pas "pipé" vers ton programme mais vers un ficheir de log par exemple, pour voir en clair le mot de passe que tu envoies à  hdiutil dans ton programme, et donc récupérer le mot de passe en clair de l'utilisateur... et donc réveler le mot de passe qu'il utilise pour tout ton système...
  • elfelf Membre
    octobre 2005 modifié #20
    Il m'a expliqué que seul -passphrase le permet et que ce que tu viens de me dire affiche un message...
    Bon si c'est loggé ça risque de poser un problème, mais je verrais ça plus tard...

    Sinon pour ce qu'il m'a expliquer je vais faire un copier coller de notre correspondance depuis ça première réponse qui inclus mon message original que je n'ai plus car je l'ai envoié depuis son module de contact de son site...

    Par contre c'est en anglais

    Rép de lui:
    De :   <supprimé>
    Objet : Rép : Guestbook Submission
    Date : 26 octobre 2005 20:11:11 GMT+02:00
    À :   <supprimé>

    In the past, I have used a combination of tools (hdid, hdutil, ditto, etc.) to create a single tool (mkdmg) that I use from within my program.

    I recently started moving toward using hdiutil specifically.

    It sounds like you are interested in creating an encrypted sparseimage (growable with size).  That type of file would have a ".sparseimage" extension.  Are you trying to use an extension other than that?

    When you say this:

    I also need to be able to mount this image and to get the content without to mount it.

    Do you mean that you would like the image to mount "silently" (not mounting on the desktop, but available in /Volumes folder, etc.)???

    You can mount images into the filesystem without them mounting on the desktop by using the following hdiutil command:

    hdiutil -mount supressed /Users/yourname/Desktop/YourImage.dmg

    This must be performed to mount these images, and it is not possible (as far as I know) to build that functionality into an image so that it will mount suppressed every time.

    Hope this helps.

    Eddie Kelley
    www.kelleycomputing.net


    On Oct 26, 2005, at 10:38 AM, <supprimé> wrote:

    email = <supprimé>
    name = Kenneth Ballenegger
    comment = [Dev: FreeDMG]

    Hello,

    I got some question about how you developed FreeDMG.

    I am a Mac developper and I am trying to find a way to manage Disk Images, what I exactly need to do is to build an editable AES-encrypted disk image with a file in it and a variable amount of free space (it should have an other extension, not .dmg), I also need to be able to mount this image and to get the content without to mount it.

    I heard about the framework DiskImages but it is privat. Then I saw the hdiutil command line tool but I am not able to use it properly.

    If your intrested in helping me it would be very nice :)

    My e-mail is <supprimé>
    My AIM (iChat) is seoxyx
    My MSN is msn@seosoft.info

    Thanks,
    Kenneth Ballenegger
    Submit = Submit
    Remote IP address: <supprimé>


    Ma réponse:


    De :   <supprimé>
    Objet : Rép : Guestbook Submission
    Date : 26 octobre 2005 21:13:56 GMT+02:00
    À :   <supprimé>

    Thanks for your help.

    I see you used tasks. Is mkdmg a public tool?

    When you say
    It sounds like you are interested in creating an encrypted sparseimage (growable with size).  That type of file would have a ".sparseimage" extension.  Are you trying to use an extension other than that?
    that's not exactly what I mean; I need to have a custom extension (.acces) and the user should not be able to open it as a normal disk image, when he double-clicks on the disk image with the custom extension it should open my software, but I'll maybe just do a .acces bundle type which will contain a disk image and a plist information dictionary. I never heard about sparseimages but this sounds like what I need.

    But I still don't understand how hdiutil works, could you give me some sample codes for:
    -Creating an editable disk image growable in size with AES password encoding
    -Mount that image (my software knows the password, so it shouldn't ask the user for a passwd)
    -Mount that image supressed

    Thanks a lot,
    Kenneth Ballenegger



    Sa rép:


    De :   <supprimé>
    Objet : Rép : Guestbook Submission
    Date : 26 octobre 2005 23:28:15 GMT+02:00
    À :   <supprimé>


    On Oct 26, 2005, at 12:13 PM, Kenneth Olivier Ballenegger wrote:

    But I still don't understand how hdiutil works, could you give me some sample codes for:
    -Creating an editable disk image growable in size with AES password encoding

    hdiutil create -type SPARSE -size 1g -fs HFS+ diskImageName

    This creates a 1GB sparseimage with HFS+ filesystem.  Because it is a SPARSE type image, it will expand with the size of the filesystem within it.  To resize the filesystem, you can use the "resize" hdiutil options.

    -Mount that image (my software knows the password, so it shouldn't ask the user for a passwd)

    hdiutil attach /Path/To/Image -passphrase yourpassword

    Note that the -passphrase option has been deprecated in favor of -stdinpass.  Unfortunately, -stdinpass won't let you (or I can't figure out how to do it) specify the password as an argument for the hdiutil program, you would have to enter the command, and then it prompts for password.  Deprecated means that eventually, -passphrase will stop working (in future versions of OS X).

    -Mount that image supressed

    hdiutil attach /Path/To/Image -nobrowse

    This will mount the image as a device (eg. /dev/disk2).  After that, you can find the volume mounted in "/Volumes", but it will not appear in the Finder, etc.

    You can combine any of the options used with attach:

    hdiutil attach /Path/To/Image -passphrase yourpassword -nobrowse

    Eddie Kelley
    www.kelleycomputing.net


    SeoxyS

    Edit modo: suppression des adresses mail et autres IP, et des copies des réponses incluses dans les quotes
Connectez-vous ou Inscrivez-vous pour répondre.