როგორ უსაფრთხოდ დავშიფროთ ფაილები Linux-ზე Dm-crypt-ით? Linux bootloaders მხარს უჭერს სრული დისკის დაშიფვრას? Debian დისკის დაშიფვრა.

ამ სტატიაში მე გეტყვით როგორ შევქმნათ ფარული კრიპტო კონტეინერი. სტანდარტული საშუალებები Linux OS (LUKS და cryptsetup). LUKS-ის ჩაშენებული ფუნქციები (როგორიცაა გარე სათაურების გამოყენება და რეალური მონაცემების განთავსება მოცემულ ოფსეტზე) საშუალებას აძლევს მომხმარებელს წვდომა იქონიოს არსებულ კონტეინერში დამალულ მონაცემებზე, ასევე უარყოს ასეთი მონაცემების არსებობა.

UPD:ვინაიდან ეს პოსტი მზად იყო ერთი თვის წინ, მაშინ ვერც კი წარმოვიდგენდი პროექტის ასეთ უცნაურ და მოულოდნელ სიკვდილს. დიახ, დიახ, შეიძლება ჯერ კიდევ არ მომკვდარა, ვნახოთ... მიუხედავად ამისა, ამ ტექსტში გადავწყვიტე ყველა მითითება TrueCrypt-ზე დავტოვო ისე, როგორც არის.

რა არის "სარწმუნო უარყოფა"?

თქვენ შეგიძლიათ იპოვოთ ამ კონცეფციის ძალიან გრძელი და დეტალური აღწერა ვიკიპედიაში: http://en.wikipedia.org/wiki/Plausible_deniability . მოკლედ, ეს ნიშნავს, რომ თქვენ შეიძლება გქონდეთ (ან შეგეძლოთ რაღაცის გაკეთება), რომლის არსებობაზე ეჭვს ან დამტკიცებას ვერავინ შეძლებს (თუ თქვენ თვითონ არ აღიარებთ ამას, რა თქმა უნდა). შემდეგ კი შეგიძლიათ უარყოთ ამის არსებობა (ან კეთების ფაქტი), თუ ვინმეს თქვენი დადანაშაულება უნდა, რადგან (ვიმეორებ) ეს ფაქტი დაუმტკიცებელია. ისე, მაგალითად, ბავშვმა პატარა ძმას უკანალი რომ დაარტყა, ძმა კი მშობლებისგან სამართლის საძიებლად წავიდეს, ამ შემთხვევაში რა მოხდებოდა?

ისე... თითქოს არაფერი ხდება. იმიტომ, რომ ეს ბიჭი უარს იტყვის და მშობლები, ფორმალურად რომ ვთქვათ, ვერ შეძლებენ მის ხელში დაჭერას (რადგან, ჯერ ერთი, მოწმეები სულელურად არ არსებობენ და მეორეც, უმცროს ძმას შეუძლია თავისი ბინძური თამაში). ამრიგად, არავინ დაისჯება. ისე, ან ორივეს დაისჯებიან ყველა მეხანძრეზე. ეს მხოლოდ მაგალითი იყო აგრესიისკენ მიდრეკილი ბავშვის მიერ სარწმუნო უარყოფის შესაძლებლობის გამოყენებისა. მაგრამ მე და შენ, რა თქმა უნდა, თეთრი და ფუმფულა ვართ და ჩვენ გამოვიყენებთ დამალულ კონტეინერებს მხოლოდ იმისთვის, რომ დავიცვათ ჩვენი პირადი მონაცემები ცუდი ბიჭებისგან. Მართალია? რა თქმა უნდა, „რა არის „კარგი“ და რა არის „ცუდი“ ცალკე საკითხია... თუმცა, უფრო არსებითად.

განხორციელების ზოგადი იდეა

დავუშვათ, რომ გვინდა რამდენიმე მნიშვნელოვანი მონაცემის შენახვა დაშიფრული ფაილის შიგნით. ზოგადად, ჩვენ გამოვიყენებთ კრიპტო-დაცვის პროგრამას, რომელიც შეგვისრულებს ყველა ბინძურ საქმეს. შეიძლება გვსურს, დაშიფრული ფაილი ვირტუალურ დისკად მივიჩნიოთ და ეს მნიშვნელოვნად ამცირებს პოტენციურ კანდიდატთა რაოდენობას. თუმცა არის ერთი "მაგრამ". თითქმის ყველა ასეთი პროგრამა მუშაობს ფაილთან, ისევე როგორც ერთი დაშიფრული მონაცემებით. ნება მომეცით აგიხსნათ: მომხმარებელს ჩვეულებრივ აქვს ერთიპაროლი (და შესაძლოა რამდენიმე „სათადარიგო“) ამისთვის ყველამონაცემები კონტეინერის შიგნით. ეს ნიშნავს, რომ არსებობს მინიმუმ ერთი სუსტი ბმული: კონტეინერის პაროლი. არ მინდა აღვნიშნო, რომ პაროლი უნდა იყოს კრიპტოგრაფიულად ძლიერი, რადგან ეს საერთო სიმართლეა. რას ვგულისხმობ არის ის, რომ თუ მომხმარებელი რაიმე მიზეზით (მაგ., იძულებით) დათმობს ამ პაროლს, ყველა მონაცემი წაიკითხება. და ეს ფაქტი სამწუხარო და სრულიად არასწორი მეჩვენება ...

თუმცა, ზოგადად, არსებობს იმედი. :) მაგალითად, არის პროგრამა, როგორიცაა , რომელიც საკმაოდ ჭკვიანია. მომხმარებელს შეუძლია შექმნას ორი კონტეინერი ერთ ფაილში: ერთი არის „მატყუარა“ გარკვეული რაოდენობის „აკრძალული“, მაგრამ შედარებით უსაფრთხო ფაილებით, ხოლო მეორე არის რეალური, მონაცემებით, რომლებიც არავითარ შემთხვევაში არ უნდა გამოაშკარავდეს. ამრიგად, TrueCrypt ითხოვს ორ განსხვავებულ პაროლს, როდესაც მომხმარებელს სურს შექმნას ასეთი "ორმაგი" კონტეინერი. ექსპლუატაციის დროს მომხმარებელი მხოლოდ ერთ პაროლს შეაქვს „რეალური“ ნაწილისთვის და მუშაობს მასთან. იმ შემთხვევაში, თუ გარე გარემოებების ზეწოლის ქვეშ, მომხმარებელი იძულებულია გაუმჟღავნოს კონტეინერის შინაარსი მესამე პირებს, ის უბრალოდ შეიყვანს სხვა პაროლს და TrueCrypt ხსნის "ყალბს". ხაზს ვუსვამ (და ეს მართლაც მნიშვნელოვანია), რომ არ არსებობს გზა დამალული ნაწილის არსებობის დასამტკიცებლად, თუ მკვლევარმა არ იცის შესაბამისი პაროლი.

და ახლა მოდით სწრაფად გაერკვნენ, თუ როგორ მუშაობს ეს უსარგებლო ... სინამდვილეში, ყველაფერი ძალიან მარტივია. პროგრამა ყოფს კონტეინერის ფაილს ორ (ზოგადად, არათანაბარ) ნაწილად. პირველი ნაწილი, რომელიც შეიძლება იყოს შედარებით მცირე, შეიცავს სპეციალურად მომზადებულ მონაცემებს; მეორე რეალურია. შესაბამისად, პროგრამას უნდა შეეძლოს ორი განსხვავებული სათაურით (კონფიგურაციით) მუშაობა ორი სხვადასხვა ნაწილისთვის და ასევე უნდა შეეძლოს აირჩიოს რომელი ნაწილის გაშიფვრა მომხმარებლის მიერ შეყვანილი პაროლის მიხედვით. და ეს, უნდა ითქვას, არ არის ნაწარმოების ყველაზე ტრივიალური ნაწილი. ისე, უბრალოდ იმიტომ, რომ "ოფიციალურად" მხოლოდ ერთი "ყალბი" კონფიგურაცია უნდა იყოს ხილული: თუ კონტეინერს აქვს სტანდარტული სათაური, ის უნდა იყოს მხოლოდ "ყალბი" სათაური; თუ კონტეინერის პარამეტრები ინახება ცალკე კონფიგურაციაში, ამ კონფიგურაციამ უნდა დაუშვას მხოლოდ "ყალბი" ნაწილის გაშიფვრა. და "ყალბი" ნაწილის გაშიფვრის შემდეგ, არ უნდა იყოს ერთი მინიშნება რეალურის არსებობის შესახებ. ისინი უნდა იყვნენ აბსოლუტურად დამოუკიდებელი. უფრო მეტიც, როდესაც "ყალბი" ნაწილი იხსნება, პროგრამამ უნდა აჩვენოს კრიპტო კონტეინერის სრული ტევადობა, მაშინაც კი, თუ ამ ნაწილის მოცულობა გაცილებით მცირეა.

რაც შეეხება LUKS-ს?

კარგი, აქ ჩვენ გვაქვს კარგი ამბავი და... კიდევ უფრო კარგი ამბავი.

კარგი ამბავი ის არის, რომ cryptsetup-ს შეუძლია TrueCrypt-ის მიერ შექმნილი ტომების გაშიფვრა და დამონტაჟება. თუმცა, მხოლოდ წაიკითხეთ, მაგრამ ეს სისულელეა. რადგან უკეთესი სიახლეები არსებობს. კერძოდ, ჩვენ შეგვიძლია შევქმნათ "ფარული" კონტეინერები ექსკლუზიურად გამოყენებით. უფრო მეტიც, ეს პროგრამა საშუალებას გაძლევთ შექმნათ ნებისმიერი რაოდენობის "ფარული" ნაწილები. ბუნებრივია, გონივრულ ფარგლებში. და აი, როგორ შეიძლება ამის გაკეთება.

მაგრამ სანამ გავაგრძელებ,

უზარმაზარი ცხიმიანი საშინელი გაფრთხილება!!!

  • ქვემოთ მოყვანილმა ყველაფერმა შეიძლება გამოიწვიოს მონაცემთა შეუქცევადი დაკარგვა.
  • თქვენს ქვეყანაში, ძლიერი კრიპტოგრაფიის გამოყენება შეიძლება აკრძალული იყოს, ასე რომ თქვენ შეიძლება დააპატიმრონ არა რეალური ინფორმაციისთვის, არამედ უბრალოდ კრიპტო კონტეინერის არსებობისთვის, რომელიც თქვენს ხრახნებზე იქნება ნაპოვნი.
  • კრიპტოგრაფიას შეუძლია დაიცვას თქვენი მონაცემები, მაგრამ ის არ დაგიცავთ წამებისგან. დამალული კონტეინერი დაგეხმარებათ შეინახოთ ღირებული ინფორმაცია, მაგრამ თქვენ არ შეგიძლიათ უარყოთ მისი არსებობა ღალატის ან დენონსაციის შემთხვევაში.
  • ბიჭები, რომლებიც დაინტერესებულნი არიან თქვენი დაშიფრული მონაცემებით, შეიძლება არ იყვნენ ისეთი სულელები, როგორც თქვენ მოელოდით. მაშინაც კი, თუ მათ არ შეუძლიათ დაამტკიცონ კონტეინერის ფარული ნაწილის არსებობა, მათ შეიძლება კარგად ჩაგკეტონ იმავე საკანში გამოცდილი კრიმინალებთან და რამდენიმე დღეში დაიმახსოვრე ყველა ფარული მონაცემების ყველა პაროლი.
  • თუ გყავთ ახლო ადამიანები (შეყვარებული/შეყვარებული, ნათესავები, მეგობრები), ისინი ასევე შეიძლება გახდნენ მძიმე ზეწოლის სამიზნე. და ეს ნამდვილად დაგეხმარებათ უფრო სწრაფად დაიმახსოვროთ ყველაფერი, მათ შორის ის, რაც არც კი იცოდით.

ამიტომ სჯობს ორჯერ დაფიქრდეთ იმაზე, თუ რამდენად ღირებულია თქვენი და თქვენი საყვარელი ადამიანების სიცოცხლეზე ინფორმაცია. და გააკეთე სარეზერვო. Ყოველი შემთხვევისთვის.

ისე, man cryptsetup-ს შეუძლია ბევრი რამ გვითხრას საინტერესო დეტალებიამ პროგრამის ბრძანების ხაზის ვარიანტების შესახებ. მაგალითად, მოდით შევხედოთ --header ვარიანტს:

Კარგი. ეს ნიშნავს, რომ ახლა ჩვენ შეგვიძლია გვქონდეს მონაცემთა მოცულობა სავსე შემთხვევითი უსარგებლო მასალებით, აბსოლუტურად მნიშვნელოვანი ხელმოწერების გარეშე. ამ ვარიანტის აღწერა შეიცავს ცოტა მეტ ინფორმაციას, გაფრთხილებებს და გაფრთხილებებს, მაგრამ საბოლოო ჯამში, ეს არის ყველაფერი, რაც საჭიროა. თუმცა, მე გირჩევთ წაიკითხოთ ეს შესანიშნავი სახელმძღვანელო.

კიდევ ერთი ძალიან სასარგებლო ვარიანტია --align-payload, რომელიც საშუალებას გაძლევთ მოაწყოთ რეალური მონაცემები მოცულობის დასაწყისთან შედარებით გარკვეულ ოფსეტზე:

და ეს ასევე მაგარია, რადგან ახლა ჩვენ შეგვიძლია თავისუფლად გადავიტანოთ ჩვენი მონაცემები მოცულობის ნებისმიერ ნაწილზე. გესმით იდეა, არა?

  1. ჩვენ ვაკეთებთ მოცულობას დაშიფვრისთვის: ჩვენ მთლიანად გადავწერთ მას შემთხვევითი მონაცემებით.
  2. ჩვენ ვაკეთებთ "ოფიციალურ" დაშიფრულ ტომს და ცოტას ვუშვებთ ინფიცირებული ვარეზი, დახვეული მუზლა, პრონსასარგებლო უფასო პროგრამული უზრუნველყოფა, ჩანაწერები თქვენი სამოყვარულო როკ ჯგუფიდან, სასიყვარულო ფილმები და ა.შ. ზოგადად, რისთვისაც მოგცემთ არაუმეტეს ორი წლის გამოსაცდელს.
  3. ზემოთ მოყვანილი ეზოთერული კრიპტის დაყენების ვარიანტების გამოყენებით, ჩვენ ვქმნით ფარულ ტომს („ოფიციალური“ შიგნით) და გადავცემთ მის სათაურს გარე მედიაზე. აქ შეგიძლიათ შეინახოთ მართლაც საშიში ინფორმაცია (როგორიცაა თქვენი საბავშვო ბაღის ფოტოები ან მსოფლიოს დაპყრობის გეგმები).

სინამდვილეში, ხალხო, ეს ყველაფერია. არავითარი ჯადოქრობა. ბუნებრივია, თქვენ არ შეგიძლიათ "ოფიციალური" დაშიფრული დისკის ტევადობაზე დატენვა იმ მარტივი მიზეზის გამო, რომ მისი სივრცის ნაწილი გადაეცემა დამალულ კონტეინერს. და, როგორც დასაწყისში ვთქვი, შეგიძლიათ, თუ გსურთ, შექმნათ მრავალი დამალული დისკი იმავე ლოგიკით.

აქ ... და თუ ჯერ კიდევ გჭირდებათ დეტალები, მაშინ განსაკუთრებით თქვენთვის -

გასეირნება

ყურადღება!

შემდეგი ბრძანებები გაანადგურებს თქვენს მონაცემებს, თუ შესრულდება ტვინის ჩართვის გარეშე. დაკარგული ინფორმაციის აღდგენა შეუძლებელია, რადგან კომუნალური პროგრამები, როგორიცაა dd, მუშაობს დაბალ დონეზე (ანუ ფაილური სისტემის დონის ქვემოთ). შესაბამისად, შეუძლებელი იქნება ცვლილებების უკან დაბრუნება ან მათი ეფექტის გაუქმება, მაშინაც კი, თუ თქვენ შეწყვეტთ გაშვებისთანავე.

მოკლედ, ნუ გააკეთებთ ამას, თუ არ მოიფიქრეთ მნიშვნელოვანი ახსნა, თუ როგორ უკავშირდება თითოეული ნაბიჯი თქვენს მიზნებს. და გააკეთე სარეზერვო. ახლა.

ვთქვათ, გვაქვს მოწყობილობა მრავალი დანაყოფით. ეს იყოს, მაგალითად, /dev/sdb. და მოდით / dev/sdb1 იყოს შედარებით მცირე (8 GB) დანაყოფი, რომელიც ეძღვნება დაშიფვრას. ჩვენ მას გავყოფთ 5-ზე 3-ზე, სადაც 5 GB ნაწილი იქნება "ოფიციალური", ხოლო 3 GB ნაწილი იქნება დამალული. ასევე დავუშვათ, რომ დაშიფრული დისკის გასაღებს შევინახავთ /etc/keys-ში, ხოლო ფარული კონტეინერის სათაურს, შესაბამისად, გარე USB დისკზე, რომელსაც დავამონტაჟებთ /media/user/ExtUSBStick-ში. ვფიქრობ, თქვენ უკვე იცით, რა ნებართვები გჭირდებათ გასაღებების მაღაზიაში, როგორ დააკონფიგურიროთ encfs/ecryptfs კონფიდენციალური მონაცემების უსაფრთხოდ შესანახად დაუცველ მოწყობილობებზე და ასევე, რომ აზრი აქვს რეალური საიდუმლო გასაღებების კოპირებას და მათ შენახვას რამდენიმე გეოგრაფიულად განცალკევებულ სეიფში.

კარგი, წუწუნს ვუკავშირდები და საკითხის არსზე გადავდივარ.

    მოწყობილობის ინიციალიზაცია /dev/sdb1:

    Dd if=/dev/urandom of=/dev/sdb1 bs=16M

    ჩვენ ვაკეთებთ გასაღებს დაშიფრული ტომისთვის. 512 ბიტი (64 ბაიტი) ჩვენი მიზნებისთვის სახურავის გავლით:

    Dd if=/dev/urandom bs=64 count=1 >/etc/keys/secret.key 2>/dev/null

    დაშიფრეთ მოცულობა ახლად შექმნილი გასაღების გამოყენებით:

    Cryptsetup luksFormat /dev/sdb1 /etc/keys/secret.key

    გახსენით დაშიფრული მოწყობილობა და დააკონფიგურირეთ რუკა საიდუმლო მონაცემებში:

    Cryptsetup luksOpen --key-file /etc/keys/secret.key \ /dev/sdb1 secretdata

    შექმენით დაშიფრულ ტომზე ფაილების სისტემა(მაგ. btrfs):

    Mkfs.btrfs -L SecretData /dev/mapper/secretdata

    ... და დაამონტაჟე:

    Mount /dev/mapper/secretdata /var/secretdata/

    5 გიგა ლიმიტის გათვალისწინებით, დააყენეთ ქვემოცულობის კვოტა:

    Btrfs კვოტას ჩართვა /var/secretdata/

    ვინაიდან btrfs კვოტები ვრცელდება მხოლოდ ქვეტომებზე, მოდით შევქმნათ ერთი ასეთი რამ:

    brfs ქვეტომის შექმნა /var/secretdata/workingvolume

    ... და გამოიყენეთ მითითებული კვოტა მასზე (გაითვალისწინეთ, რომ btrfs ქვეტომები შეიძლება დამონტაჟდეს როგორც ჩვეულებრივი ფაილური სისტემა, ასე რომ უფრო მოსახერხებელი იქნება თქვენთვის ამ კონკრეტული ქვეტომის დამონტაჟება მთელი fs-ის ნაცვლად):

    btrfs qgroup ლიმიტი 5G /var/secretdata/სამუშაო მოცულობა

    ჩვენ ვავსებთ მას გარკვეული მონაცემებით:

    debootstrap --variant=ჩაშენებული ტესტირება /var/secretdata/workingvolume

    ეს ყველაფერია, ახლა შეგიძლიათ დაივიწყოთ ეს ნაწილი:

    დაამაუნტე /var/secretdata cryptsetup luksClose secretdata

    ახლა მოდით შევქმნათ "თევზი" სათაურისთვის და ჩავყაროთ მასში შემთხვევითი ნაგავი:

    Dd if=/dev/urandom of=/media/user/ExtUSBStick/hidden.head bs=4M count=1

    ახლა კი დადგება მომენტი, როდესაც იწყება ნამდვილი მაგია. (რა? მე ვთქვი, რომ ჯადოქრობა არ იყო? ამიტომ მოვიტყუე.) ჩვენ ვიყენებთ იგივე საიდუმლო გასაღებს, თუმცა არა მთლიანად, არამედ მხოლოდ ნახევარს (32 ბაიტის ოფსეტურიდან). თუმცა, დარჩენილი 256 შემთხვევითი ბიტი საკმაოდ შეუძლია კარგი გასაღების შექმნას. შემდეგ გამოვყოფთ სათაურს და დავდებთ ფლეშკაზე. დაბოლოს, ჩვენ ვეუბნებით cryptsetup "y"-ს, რომ ჩვენ გვინდა დავაფიქსიროთ ჩვენი ფარული კონტეინერი 5 გბ-ით (ანუ 10485760 512-ბაიტიანი ბლოკებით) მოცულობის დასაწყისიდან:

    Cryptsetup --keyfile-offset 32 ​​-- header /media/user/ExtUSBStick/hidden.head \ --align-payload 10485760 luksFormat /dev/sdb1 /etc/keys/secret.key

    დიახ, ეს ასე მარტივია. ახლა მოდით გავხსნათ ახალი დაშიფრული მოწყობილობა:

    Cryptsetup luksOpen --key-file /etc/keys/secret.key --keyfile-offset 32\ --header /media/user/ExtUSBStick/hidden.head /dev/sdb1 realsecretdata

    გავაბრტყელოთ ნებისმიერი ფ, რომელიც გვინდა:

    Mkfs.btrfs /dev/mapper/realsecretdata

გამოსადეგი ბმულები

მათთვის, ვისაც სურს ცოტა მეტი იცოდეს, აქ არის ინფორმაციის რამდენიმე დამატებითი წყარო:

  • დისკის დაშიფვრაზოგადი ინფორმაცია დისკის დაშიფვრის შესახებ: https://wiki.archlinux.org/index.php/Disk_encryption
  • უარყოფილია დაშიფვრა, კონცეფცია გარკვეულწილად უფრო ვიწროა, ვიდრე "სარწმუნო უარყოფა", ეხება მხოლოდ კრიპტოგრაფიის სფეროს: https://en.wikipedia.org/wiki/Deniable_encryption
  • TrueCrypt

დისკი (a la TrueCrypt). მე ვიცი, რომ სამუშაო იყო GRUB2-ში დაშიფვრის მხარდაჭერის დასამატებლად, მაგრამ ის ჯერ არ არის მზად. რაიმე სხვა ვარიანტი?

(გაითვალისწინეთ, რომ მე ნამდვილად ვგულისხმობ დისკის სრულ დაშიფვრას აქ, მათ შორის / boot)

პასუხების უმეტესობა აღწერს კონფიგურაციას, სადაც /boot არ არის დაშიფრული და ზოგიერთი მათგანი ცდილობს ახსნას, რატომ უნდა იყოს დაშიფრული /boot კარგი.

დისკუსიის გარეშე, თუ რატომ მჭირდება /boot დაშიფვრა, აქ არის სტატია, რომელიც აღწერს ზუსტად იმას, რაც მე მჭირდება GRUB2-ის შეცვლილ ვერსიაზე დაყრდნობით:

  • http://xercestech.com/full-system-encryption-for-linux.geek

პრობლემა ის არის, რომ ეს ცვლილებები არ არის მხარდაჭერილი მიმდინარე GRUB2 კოდების ბაზაში (ან შესაძლოა რაღაც გამომრჩა).

8 გადაწყვეტილებები აგროვებს ვებ ფორმას „Linux bootloaders-ისთვის, რომლებიც მხარს უჭერენ დისკის სრულ დაშიფვრას?“

მე ვფიქრობ, რომ Მოქმედი ვერსია GRUB2 არ უჭერს მხარს LUKS ტიხრების ჩატვირთვას და გაშიფვრას (ის შეიცავს რამდენიმე შიფრებს, მაგრამ ვფიქრობ, რომ ისინი გამოიყენება მხოლოდ პაროლების მხარდასაჭერად). ექსპერიმენტული განვითარების ფილიალს ვერ ვამოწმებ, მაგრამ GRUB-ის გვერდზე არის მინიშნებები იმის შესახებ, რომ დაგეგმილია სამუშაოს განხორციელება, რომლის შესრულებაც გსურთ.

განახლება (2015) : უახლესი ვერსია GRUB2 (2.00) უკვე შეიცავს LUKS და GELI დაშიფრულ ტიხრებზე წვდომის კოდს. (Xercestch.com-ის ბმული, რომელიც OP-მა მოგვაწოდა, აღნიშნავს ამის პირველ შესწორებებს, მაგრამ ისინი ახლა შედის უახლეს ვერსიაში).

თუმცა, თუ ცდილობთ მთელი დისკის დაშიფვრას უსაფრთხოების მიზეზების გამო, გაითვალისწინეთ, რომ დაშიფრული ჩამტვირთველი (როგორიცაა TrueCrypt, BitLocker ან შეცვლილი GRUB) არ უზრუნველყოფს უფრო მეტ დაცვას, ვიდრე დაშიფრული / ჩატვირთვის დანაყოფი (როგორც აღნიშნულია SP-ში კომენტარი ზემოთ). ნებისმიერს, ვისაც აქვს ფიზიკური წვდომა კომპიუტერზე, შეუძლია ისევე ადვილად შეცვალოს იგი მორგებული ვერსიით. ის კი ნახსენებია xercestech.com-ის სტატიაში, რომელიც თქვენ დააკავშირეთ:

გასაგებად რომ ვთქვათ, ეს არანაირად არ ხდის თქვენს სისტემას ნაკლებად დაუცველს ოფლაინ თავდასხმის მიმართ, თუ თავდამსხმელი ჩაანაცვლებს თქვენს ჩამტვირთველს თავისით ან გადამისამართებს ჩატვირთვის პროცესს საკუთარი ჩატვირთვისთვის. საკუთარი კოდი, თქვენი სისტემა შესაძლოა კვლავ დაზარალდეს.

გაითვალისწინეთ, რომ ყველა სრული დისკის დაშიფვრის პროგრამულ პროდუქტს აქვს ეს სისუსტე, იქნება ეს დაშიფრული ჩამტვირთველის ან დაშიფრული ჩატვირთვის/წინასწარ ჩატვირთვის დანაყოფის გამოყენება. პროდუქტებიც კი, რომლებიც მხარს უჭერენ TPM (სანდო პლატფორმის მოდულს) ჩიპებს, როგორიცაა BitLocker, შეიძლება განთავსდეს ტექნიკის შეცვლის გარეშე.

საუკეთესო მიდგომა იქნება:

  1. გაშიფვრა BIOS დონეზე (in დედაპლატაან დისკის ადაპტერი ან გარე აპარატურა [სმარტ ბარათი], TPM ჩიპით ან მის გარეშე), ან
  2. შეიტანეთ PBA (წინასწარ ჩატვირთვის ავტორიზაცია) ავტორიზაციის კოდი (ამ შემთხვევაში /boot დანაყოფი) მოსახსნელ მოწყობილობაზე (მაგალითად, სმარტ ბარათზე ან USB დისკზე).

მეორე გზით გასაკეთებლად, შეგიძლიათ შეამოწმოთ Linux სრული პროექტი დისკის დაშიფვრა(LFDE) მისამართზე: http://lfde.org/ რომელიც უზრუნველყოფს ინსტალაციის შემდგომ სკრიპტს /boot დანაყოფის გადასატანად გარე USB დისკიგასაღების GPG-ით დაშიფვრით და USB-ზე შენახვით. ამ გზით, ჩატვირთვის ბილიკის სუსტი ნაწილი (დაშიფრული / ჩატვირთვის დანაყოფი) ყოველთვის თქვენთან იქნება (თქვენ იქნებით ერთადერთი, ვისაც ფიზიკური წვდომაკოდის და გასაღების გაშიფვრამდე). ( შენიშვნა: ეს საიტი დაიკარგა და ავტორის ბლოგიც გაქრა, თუმცა ძველი ფაილები შეგიძლიათ იხილოთ https://github.com/mv-code/lfde მხოლოდ იმის აღნიშვნით, რომ ბოლო განვითარება გაკეთდა 6 წლის წინ). როგორც უფრო მარტივი ალტერნატივა, შეგიძლიათ დაამონტაჟოთ დაშიფრული ჩატვირთვის დანაყოფი USB დისკზე OS-ის დაყენებისას.

პატივისცემით, მ.ვ.

გახადეთ თქვენი პირველი RAMdisk და /boot საქაღალდე დაუშიფრავი.

ეს გამოიწვევს "მინიმალურ" ბირთვს დრაივერებით და მხარდაჭერით, რათა გადავიდეს "რეალურ" root ფაილურ სისტემაზე, რომელიც დაშიფრულია.

სანამ განაცხადებთ "ეს ჰაკია", გახსოვდეთ - Linux დისტრიბუციის უმეტესობა (თუ არა ყველა) დღეს ნაგულისხმევად ჩატვირთულია. ეს აშკარად საშუალებას აძლევს თქვენს სისტემას ჩატვირთოს და ჩატვირთოს root FS მოდულების გამოყენებით, რომლებიც უნდა ჩატვირთოს ფაილური სისტემიდან. (ქათამისა და კვერცხის ერთგვარი პრობლემა). მაგალითად, თუ თქვენი root ფაილური სისტემა იყო აპარატურის RAID ტომზე და გჭირდებათ მისი დრაივერის ჩატვირთვა, სანამ root FS-ის დამონტაჟებას შეძლებდით.

შენს მიერ დადებულ ლინკს გადავხედე - თუმცა ჩატვირთვის დანაყოფიარა, მყარ დისკს ჯერ კიდევ აქვს დაშიფრული ჩამტვირთველი, რომელზე წვდომა და მავნე თავდასხმა შეიძლება დაზარალდეს. მე ვეძებდი მსგავს კონფიგურაციას, რომელსაც არ აქვს რაიმე დაუშიფრავი მონაცემები მყარ დისკზე, მაგრამ ჯერჯერობით მხოლოდ მოსახსნელი დისკიდან ჩამტვირთველის გაშვება მომივიდა.

მე მჯერა, რომ ყველაზე მეტად რაც გჭირდებათ, არის ინსტრუქცია, თუ როგორ უნდა დააინსტალიროთ OS დაშიფრული HD-ით პირველ რიგში.

Ubuntu-ს აქვს ლამაზი გვერდი ინსტრუქციებით, თუ როგორ უნდა შექმნათ დაშიფრული ტიხრები, LMVP, საქაღალდეები და ა.შ, მხოლოდ თქვენი დისტრიბუციის თქვენი ვერსია...

არა, მე ასე არ ვფიქრობ.

ნამდვილად გჭირდებათ დაშიფვრა/ატვირთვა? მეეჭვება არა. დანარჩენი ფაილური სისტემა შეიძლება დაშიფრული იყოს ნორმალურად პროგრამული უზრუნველყოფა Linux, რომელიც ბინადრობს initramfs-ში /boot-ში და შესაბამისად სთხოვს მომხმარებელს.

როგორც ჩანს, რაღაცას ითხოვ, რისი გაკეთებაც შეუძლებელია და ამას ადარებ Windows გადაწყვეტა, რომელიც მალავს თქვენგან განხორციელებას,მაგრამ რეალურად აკეთებს იგივეს, რასაც Linux აკეთებს.

უახლოესი გამოსავალი, რაც შემიძლია მოვიფიქრო, არის გამოყენება HDD, რომელიც ახორციელებს პაროლის უსაფრთხოებას და დაშიფვრას. Ზოგიერთი Thinkpad ლეპტოპებიგამოიყენეთ ეს ტექნიკის გადაწყვეტილებები.

პასუხი სტატიაშია. "ეს ახლა შესაძლებელია შემდეგი თაობის GRUB2 ჩამტვირთველის გაფართოებით, რომელიც დაყენებულია არა მხოლოდ მხარდაჭერისთვის" და "გვინდა დავაინსტალიროთ ახალი luks grub2-ზე ჩართული სურათი", და "ახლა ჩვენ შევადგინებთ GRUB2 წყაროს LUKS-ით". მხარდაჭერა. როგორც ჩანს, არის შესწორება ან გაფართოება, რომელიც უნდა მიიღოთ და ჩართოთ GRUB2-ით ან GRUB2 ჩანგალი წყაროთ.

Grub2 ვერსია 2.02~beta3-ს შეუძლია ბევრი რამის გაკეთება, რასაც Grub2 ვერსია 2.02~beta2 ვერ გააკეთებს, ჩემ მიერ დამოწმებული:

  1. ჩატვირთვა Super Grub 2 დისკის გამოყენებით
  2. ჩაწერეთ "c" ბრძანების სტრიქონზე გადასასვლელად
  3. შეიყვანეთ ბრძანებები სასურველი დაშიფრული დანაყოფის დასამონტაჟებლად
    • insmod lux
    • cryptomount (hd0, #) // სადაც # წარმოადგენს დაშიფრულ დანაყოფს
  4. შედი საკვანძო ფრაზადა შეიყვანეთ რამდენიმე ბრძანება
    • multiboot (crypto0) /grub/i386-pc/core.img
    • ფეხსაცმელი

ეს ჩატვირთავს სხვა Grub2-ს, რომელიც არის დაშიფრული დანაყოფის შიგნით, აქ არ არის ბოროტი გიჟური შეტევა... მე ჩავტვირთავ CD-დან (მხოლოდ წასაკითხად) და შემდეგ ვამონტაჟებ დაშიფრულ დანაყოფის (არა ფრაზების, არაფერი!), შემდეგ ჩატვირთვას შიგნიდან. დაშიფრული დანაყოფი და ჩატვირთვა Grub2 საკუთარი მენიუთი და ა.შ.

გაფრთხილება: Grub2 ვერსია 2.02~beta2 არ შეუძლია იგივე გააკეთოს, რადგან მას აქვს გარკვეული ხარვეზები (რომლებიც, როგორც ჩანს, გამოსწორებულია Grub2 ვერსიაში 2.02~beta3) დაკავშირებული cryptomount ბრძანებასთან...

ბეტა2 შეცდომები, რომელზეც ვსაუბრობ არის:

  1. ის რეალურად არ ამონტაჟებს დაშიფრულ დანაყოფს, ამიტომ არ გაძლევთ წვდომის საშუალებას (crypto0)/*
  2. თუ არსებობს ერთზე მეტი დაშიფრული დანაყოფი, cryptomount -a-ის გამოყენება მოითხოვს მხოლოდ ერთ საიდუმლო ფრაზას
  3. კრიპტომაუნტის ერთხელ დაწყების შემდეგ, ის ხელახლა იწყება, არაფერს აკეთებს

ბეტა 3-ზე:

  1. ის რეალურად ამონტაჟებს დაშიფრულ დანაყოფს და საშუალებას გაძლევთ შეხვიდეთ ფაილებზე (crypto0)/* ან (crypto1)/* ა.შ., თუ ​​ერთზე მეტი დამონტაჟებულია ერთდროულად.
  2. ის ითხოვს თითოეულ საიდუმლო ფრაზას (ერთი დაშიფრული განყოფილებისთვის)
  3. ეს საშუალებას გაძლევთ გაუშვათ ის რამდენჯერაც გსურთ, შეგიძლიათ დააინსტალიროთ ერთი, შემდეგ მეორე და ა.შ.

გვერდითი შენიშვნა: მე ვერ მივხვდი, როგორ გამოვაყენო ისინი სხვა ან ერთის გადატვირთვის ან ჩატვირთვის გარდა ჩამტვირთველი grub2/სხვა და ა.შ.

ვიმედოვნებ, რომ ეს დაგვეხმარება საკითხების გარკვევაში და იმედი მაქვს, რომ Grub2-ის 2.02~beta3 ვერსია ინტეგრირებული იქნება LiveCD-ში, რათა შევძლოთ მისი ინსტალაცია საკუთარი თავის შედგენის გარეშე.

PD: Super Grub 2 დისკზე, მე ვერ ვხედავ გზას დააინსტალირო Grub2 ვერსია 2.02~beta3 MBR/ჩატვირთვის დანაყოფზე და ა.შ.

ამ სტატიაში შევეცდები შევადაროთ სხვადასხვა დაშიფვრის სისტემების მუშაობა ლინუქსის ქვეშ. თეორიულად, რა თქმა უნდა, ცნობილია, რომელი სისტემაა უფრო პროდუქტიული და ცდილობს გამოთვალოს შესრულება სხვადასხვა სისტემებიიყვნენ (). Truecrypt კი შეიცავს ჩაშენებულ ეტალონს (რომელიც აჩვენებს, თუმცა, მუშაობას RAM-ზე, მისი გამოყენება შესაძლებელია მხოლოდ სხვადასხვა დაშიფვრის ალგორითმის სიჩქარის შესაფასებლად). მაგრამ მე გავაკეთებ რაღაც განსხვავებულს - გავზომავ სხვადასხვა საშუალებებით დაშიფრული ფაილური სისტემის სიჩქარეს, პროცენტულად, ჩვეულებრივ დაუშიფრულ ფაილურ სისტემასთან შედარებით.


ჩვენ დავშიფრავთ ცალკეულ დანაყოფს ცალკეულ HDD-ზე, რომელიც არ შეიცავს root ფაილურ სისტემას ალგორითმით, რომელიც ნაგულისხმევად გამოიყენება თითოეულ კონკრეტულ შემთხვევაში. როგორც ჩვეულებრივ მომხმარებელს, მე არ მესმის დაშიფვრის სტანდარტების ნიუანსი (მაგალითად, რით განსხვავდება RIPEMD-160 ჰეშინგი Whirpool-ისგან, ამ რეჟიმიდან რომელია უფრო სწრაფი, რომელი ხელს უწყობს უფრო მაღალ უსაფრთხოებას), ასე რომ, ჩვენ უბრალოდ ვეყრდნობით ფაქტს რომ თითოეულის მწარმოებლები პროგრამული პროდუქტიაირჩია საკმარისად კრიპტორეზისტენტული ნაგულისხმევი პარამეტრები. შესაძლოა, ეს არ არის მთლად სწორი, რადგან დაშიფვრის სხვადასხვა ალგორითმის შესრულება არ არის იგივე. თუ სასურველია, რა თქმა უნდა, შეგიძლიათ შეცვალოთ დაშიფვრის ტიპი, მაგრამ დარწმუნებული არ ვარ, რომ ყველა შემოწმებულ პროდუქტში არის აბსოლუტურად იდენტური ალგორითმების ნაკრები. ჩვენ ვამოწმებთ:

3) eCryptfs არის ნაგულისხმევი სისტემა, რომელსაც სთავაზობენ Ubuntu-ს მომხმარებლებს სახლის დირექტორიების დაშიფვრისთვის, რის გამოც ის შედის ამ ტესტში. მუშაობს არსებული ფაილური სისტემის თავზე. შიფრავს თითოეულ ფაილს ცალ-ცალკე, ასე რომ ყველას შეუძლია ნახოს უფლებები, მოდიფიკაციის თარიღები, დაშიფრული ფაილების რაოდენობა; ნაგულისხმევად, ფაილის სახელებიც ჩანს, თუმცა არსებობს მათი დაშიფვრის შესაძლებლობა. ყველაზე ნაკლებად ფუნქციონალური ინსტრუმენტი.

4) EncFS - eCryptfs-ის სავარაუდო ანალოგი, მაგრამ იყენებს FUSE-ს.

ასე რომ, ტესტებისთვის, საკმაოდ მოწინავე ასაკის ცალკეული მანქანა გამოიყო შემდეგი კონფიგურაციით: CPU - Intel Celeron 2000 Mhz, ოპერატიული მეხსიერება - 512 Mb DDR PC2700, სისტემის HDD- WD Caviar SE 5400 RPM 80Gb, ტესტი HDD - WD Caviar SE 7200 RPM 80Gb.
OS - Ubuntu 12.04 LTS, ყველა პროგრამული უზრუნველყოფის ვერსიები შესაბამისია ამ OS-ის საცავებისთვის ამ წერის დროს (Truecrypt 7.1a-linux-x86 არ არის საცავებიდან).

ჩვენ შევამოწმებთ ნაგულისხმევ ext4 ფაილურ სისტემას განაწილების უმეტესობისთვის. შესრულების შესამოწმებლად, ჩვენ გამოვიყენებთ iozone3 უტილიტას და ჭურვის სკრიპტს დაწერილი "მუხლზე", რათა გავზომოთ პროცენტული განსხვავება ტესტებში.

დათვლის დამწერლობა. კოდის სისუფთავეს განსაკუთრებული ყურადღება არ ექცეოდა, ჩაწერის ერთადერთი კრიტერიუმი იყო სწორი შედეგის არსებობა.

#!/bin/sh gendifffile () (#პროცედურა აგენერირებს ფაილს, რომელიც მოსახერხებელია ანალიზისთვის. ჯერ ერთი, ხაზები, რომელთა გაანალიზებაც შეუძლებელია; მეორეც, თითოეული სტრიქონში პირველი ორი რიცხვი იჭრება, რაც მიუთითებს # ფაილის ზომასა და ჩანაწერზე. ზომა, შესაბამისად; მესამე, მთელი ფაილი გამოდის სტრიქონ-სტრიქონში - #ერთი ტესტის შედეგი თითო სტრიქონზე კატა $1 | წაკითხვისას LINE ; გაიმეორეთ $LINE| grep "^[[:space:]]*[[:digit:] ]" | awk "(for (i=3;i<=NF;i++) {print $i}}" done > > $2 ) getline () ( #procedure გამოაქვს სტრიქონის ნომერი $2 ფაილის $1 head -n $2 "$1" | tail -n 1 ) compare () ( #procedure ადარებს ფაილებს $1 და $2 სტრიქონ-სტრიქონში, თითოეულის პროცენტული სხვაობის გაანგარიშებით ტესტების წყვილი #შემდეგ ითვლის საშუალო არითმეტიკას, რამდენი პროცენტით არის უფრო სწრაფი ან ნელი #ფაილი, რომელიც შეიცავს ტესტების პირველ ჯგუფს, ფაილი შეიცავს მეორე ჯგუფს P=0 MAX=0 L1=`კატა "$1" | wc -l` # ტესტების რაოდენობა ფაილში L2=`cat "$2" | wc -l` თუ [ $L1 -ne $L2 ]; მაშინ #თუ ფაილები შეიცავს ტესტების განსხვავებულ რაოდენობას, მაშინ ჩვენ არ შევადარებთ მათ echo error-ის დაბრუნებას fi STEP=$(($L1*5/100)) J=0 I-სთვის `სეკ 1 $L1`; გააკეთე J=$(($J+1)) თუ [ $J -eq $STEP ]; შემდეგ J =0 ექო "$((100*$I/$ L1))% დასრულებულია ($I $L1-დან)" fi A=`getline "$1" $I` B=`getline "$2" $I` თუ [ ` echo $A \> $B|bc -l` - eq 1 ]; შემდეგ D=`echo "100-($B*100/$A)"|bc -l` თუ [ `echo $D \> $MAX | bc -l` -eq "1" ]; შემდეგ MAX=$D ძილი 5 fi სხვა D=`echo "100-($A*100/$B)"|bc -l` თუ [ `echo $D \ > $MAX| bc -l` -eq "1"]; n MAX=$D ძილის 5 fi D="-$D" #თუ მნიშვნელობას აქვს "-" ნიშანი, ეს ტესტი უფრო სწრაფი იყო #მეორე ფაილში, ვიდრე პირველში fi P=`echo "$P+$D" "| bc -l` შესრულებულია P=`ექო $P/$L1| bc -l` #გამოთვალეთ საშუალო არითმეტიკული ექო PERCENT=$P MAX_PERCENT=$MAX ) გენერაცია () ( # ანალიზისთვის მომზადებული ფაილის გენერირების პროცედურა, რომლის თითოეული სტრიქონი არის ყველა ანგარიშის შესაბამისი სტრიქონების # არითმეტიკული საშუალო ფაილები, რომლებიც მდებარეობს გაანალიზებულ დირექტორიაში AVG=` mktemp` F=`ls "$1"|wc -l` #ფაილების რაოდენობა მოხსენებებით მითითებულ დირექტორიაში #იმ პირობით, რომ იქ მხოლოდ ასეთი ფაილები ინახება და სხვა არაფერი #ჩვენ არ შევამოწმებთ ამ დაშვების სისწორე, თუ [ ! -d " $1" -o $F -lt 2 ]; მაშინ echo შეცდომა >/dev/stderr #ამ პროცედურაში, ჩვენ ყველა შეტყობინებას გამოვიტანთ stderr-ში, რადგან #stdout ჩანაცვლებულია სხვაში. პროცედურა rm -f $AVG გასვლა fi TMP=` mktemp` იპოვეთ "$1" -ტიპი f| FILE წაკითხვისას; გააკეთეთ # თითოეული იოზონის ანგარიშის ფაილისთვის მოცემულ დირექტორიაში I=`mktemp` #gendifffile "$FILE" "$I " #names წერს ყველა ასეთ ფაილს "TMP"-ში სტრიქონი-სტრიქონით ექო "$I">>$TMP შესრულებულია L=`cat \`getline "$TMP" 1\`|w c -l` კატა "$TMP"| LINE წაკითხვისას; გააკეთე #პატარა შემოწმება კარგია L1=`cat "$LINE"| wc -l` #do ყველა ფაილი შეიცავს ტესტების ერთსა და იმავე რაოდენობას, თუ [ $L -ne $L1 ]; შემდეგ echo შეცდომა >/dev/stderr გასვლა fi გაკეთდა STEP=$(($L*5/100)) J=0 for I in `seq 1 $L`; გააკეთე J=$(($J+1)) თუ [$J -eq $STEP ]; შემდეგ J=0 ექო "$((100*$I/$L))% გაკეთდა ($I $L-დან)" >/dev/stderr fi SUMFILE=`mktemp` #ამ გზით მე ვიღებ SUM ცვლადის მნიშვნელობას წყობილი მარყუჟიდან SUM=0 კატა „$TMP“| LINE წაკითხვისას; გააკეთე SUM=$((`getline "$LINE" $I`+$SUM)) ექო $SUM > "$SUMFILE" შესრულებული ექო `კუდი -n 1 "$SUMFILE"`/$F|bc -l >> $ AVG #მიიღეთ საშუალო არითმეტიკული #და ჩაწერეთ AVG ფაილის შესაბამის ადგილას rm -f "$SUMFILE" შესრულებული კატა "$TMP"| LINE წაკითხვისას; do #delete დროებითი ფაილები rm -f "$LINE" გაკეთდეს rm -f "$TMP" echo $AVG ) printf %b "\\ 033)