Ստեգանոգրաֆիա ըստ ֆայլերի. տվյալների թաքցնում անմիջապես հատվածներում

Կարճ նախաբան

Ստեգանոգրաֆիան, եթե որևէ մեկը չի հիշում, թաքցնում է տեղեկատվությունը որոշ տարաներում: Օրինակ, նկարներում (քննարկված այստեղ и այստեղ) Դուք կարող եք նաև թաքցնել տվյալները ֆայլային համակարգի սպասարկման աղյուսակներում (այս մասին գրվել է այստեղ), եւ նույնիսկ TCP արձանագրության սպասարկման փաթեթներում. Ցավոք, այս բոլոր մեթոդներն ունեն մեկ թերություն՝ կոնտեյների մեջ աննկատելիորեն տեղեկատվություն «ներդնելու» համար անհրաժեշտ են խորամանկ ալգորիթմներ, որոնք հաշվի են առնում կոնտեյների ներքին կառուցվածքի առանձնահատկությունները: Եվ խնդիրներ են առաջանում կոնտեյների մանիպուլյացիայի նկատմամբ դիմադրության հետ. օրինակ, եթե մի փոքր խմբագրեք նկարը, թաքնված տեղեկատվությունը կորչում է:

Հնարավո՞ր է ինչ-որ կերպ անել առանց խորամանկ ալգորիթմների և տվյալների հետ նուրբ մանիպուլյացիաների, և դեռ ապահովել կոնտեյների ֆունկցիոնալությունը և թաքնված տվյալների անվտանգության ընդունելի մակարդակը: Նայելով առաջ, ես կասեմ՝ այո, դու կարող ես: Ես ձեզ նույնիսկ օգտակար կառաջարկեմ.

Մեթոդի արյունոտ մանրամասներ

Հիմնական գաղափարը այնքան պարզ է, որքան ճակատին հարվածելը. սկավառակի վրա կան հատվածներ, որոնց վրա օպերացիոն համակարգը երբեք չի գրում (կամ գրում է հազվադեպ դեպքերում): Այս տարածքները խորամանկ ալգորիթմների միջոցով փնտրելու անհրաժեշտությունից խուսափելու համար մենք կօգտագործենք ավելորդություն, այսինքն՝ մենք կկրկնօրինակենք մեր թաքնված տեղեկատվությունը շատ ու շատ անգամներ սկավառակի բոլոր հատվածներում: Այնուհետև, այս ամբողջ շքեղության վերևում, դուք կարող եք ստեղծել անհրաժեշտ միջնորմներ, ձևաչափել ֆայլային համակարգեր, գրել ֆայլեր և տեղադրել ՕՀ-ներ, միևնույն է, գաղտնի տվյալների մի մասը կպահվի և հնարավոր կլինի առբերել, և կրկնվող կրկնօրինակումը կօգնի մեզ: միացրեք բնօրինակը ամբողջը կտորներից:

Այս մեթոդի առավելությունն ակնհայտ է. մենք կախված չենք ֆայլի ձևաչափից կամ նույնիսկ օգտագործվող ֆայլային համակարգի տեսակից:

Թերությունները նույնպես, կարծում եմ, ակնհայտ են.

  • Գաղտնի տվյալները կարող են փոխվել միայն ամբողջ սկավառակի ամբողջական վերաշարադրմամբ, որին հաջորդում է օգտագործողի համար տեսանելի բովանդակությունը վերստեղծելով: Այնուամենայնիվ, դուք չեք կարող օգտագործել ծրագրակազմ, որը վերստեղծում է սկավառակը պատկերից. այն նաև կվերստեղծի նախկին գաղտնի տվյալները:
  • Որքան մեծ է գաղտնի տվյալների ծավալը, այնքան մեծ է որոշ տեղեկություններ կորցնելու հավանականությունը:
  • Սկավառակից տվյալների առբերումը կարող է երկար ժամանակ տևել: Մի քանի րոպեից մինչև մի քանի օր (ժամանակակից սկավառակները մեծ են):

Հիմա եկեք անցնենք կոնկրետություններին:

Հասկանալի է, որ եթե դուք պարզապես քսում եք գաղտնի տվյալները ամբողջ սկավառակի վրա, ապա դրանք միայն անզեն աչքից կթաքցվեն: Եթե ​​հայացքդ զինես, ասենք, սկավառակի խմբագրիչով, ապա տվյալները կհայտնվեն իրենց ողջ փառքով։ Հետևաբար, լավ կլինի գաղտնագրել տվյալները, որպեսզի դրանք չհայտնվեն: Մենք կգաղտնագրենք պարզ, բայց ճաշակով. օգտագործելով aes256-cbc ալգորիթմը: Մենք օգտվողից կխնդրենք գաղտնագրման բանալին և թույլ կտանք լավ գաղտնաբառ գտնել:

Հաջորդ հարցն այն է, թե ինչպես կարող ենք տարբերակել «լավ» տվյալները վատ տվյալներից: Այստեղ մեզ կօգնի ստուգիչ գումարը, բայց ոչ պարզ, այլ SHA1: Եւ ինչ? Դա բավարար է git-ի համար, ուստի այն մեզ նույնպես կհամապատասխանի: Որոշել ենք. մենք յուրաքանչյուր պահված տեղեկատվության տրամադրում ենք ստուգիչ գումար, և եթե վերծանումից հետո այն համընկնում է, նշանակում է, որ ապակոդավորումը հաջող է եղել:

Ձեզ անհրաժեշտ կլինի նաև հատվածի համարը և գաղտնի տվյալների ընդհանուր երկարությունը: Հատվածի համարն այն է, որ հետևենք, թե որ կտորներն ենք մենք արդեն վերծանել և որոնք են մնացել: Ընդհանուր երկարությունը մեզ օգտակար կլինի վերջին հատվածը մշակելիս, որպեսզի ավելորդ տվյալներ չգրենք (այսինքն՝ լցոնում): Դե, քանի որ մենք դեռ ունենք վերնագիր, մենք այնտեղ կավելացնենք գաղտնի ֆայլի անունը: Այն օգտակար կլինի վերծանումից հետո, որպեսզի չկռահեք, թե ինչպես բացել այն։

Մեթոդի փորձարկում գործնականում

Ստուգելու համար եկեք վերցնենք ամենատարածված կրիչը՝ ֆլեշ կրիչը: Ես գտա հինը 1 ԳԲ տարողությամբ, որը բավականին հարմար է փորձերի համար։ Եթե ​​դուք, ինչպես ինձ, մտաք ֆիզիկական մեդիայի հետ չանհանգստանալու, այլ այն ֆայլի վրա՝ սկավառակի պատկերի վրա փորձարկելու գաղափարը, ապա ես անմիջապես կասեմ՝ դա չի աշխատի: Նման «սկավառակը» ֆորմատավորելիս Linux-ը նորից ֆայլ է ստեղծում, և բոլոր չօգտագործված հատվածները կլցվեն զրոներով:

Որպես Linux-ով մեքենա, ցավոք, ես ստիպված էի օգտագործել օդերեւութաբանական կայան Raspberry Pi 3-ում, որը ընկած էր պատշգամբում: Այնտեղ շատ հիշողություն չկա, ուստի մենք չենք թաքցնի մեծ ֆայլեր: Մենք սահմանափակվում ենք առավելագույնը 10 մեգաբայթով: Նաև իմաստ չունի թաքցնել չափազանց փոքր ֆայլերը. կոմունալը տվյալները գրում է սկավառակի վրա 4 ԿԲ կլաստերներով: Հետևաբար, ներքևում մենք կսահմանափակվենք 3 կբ ֆայլով. այն տեղավորվում է մեկ նման կլաստերի մեջ:

Մենք կծաղրենք ֆլեշ կրիչը փուլ առ փուլ՝ յուրաքանչյուր փուլից հետո ստուգելով, թե արդյոք թաքնված տեղեկատվությունը ընթեռնելի է.

  1. Արագ ձևաչափում FAT16 ձևաչափով՝ 16 ԿԲ կլաստերի չափով: Ահա թե ինչ է առաջարկում Windows 7-ն անել ֆլեշ կրիչի հետ, որը չունի ֆայլային համակարգ:
  2. Ֆլեշ կրիչը բոլոր տեսակի աղբով լցնելը 50%-ով։
  3. Ֆլեշ կրիչը բոլոր տեսակի աղբով լցնելը 100%-ով։
  4. «Երկար» ձևաչափում FAT16 ձևաչափով (վերագրելով ամեն ինչ):

Առաջին երկու փորձարկումները, ինչպես և սպասվում էր, ավարտվեցին լիակատար հաղթանակով. կոմունալը կարողացավ հաջողությամբ հանել 10 մեգաբայթ գաղտնի տվյալներ ֆլեշ կրիչից: Բայց այն բանից հետո, երբ ֆլեշ կրիչը լիցքավորվեց ֆայլերով, տեղի ունեցավ ձախողում.

Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile

Ինչպես տեսնում եք, հաջողությամբ վերծանվել է ընդամենը 158 կլաստեր (632 կիլոբայթ չմշակված տվյալներ, որոնք տալիս են 636424 բայթ ծանրաբեռնվածություն): Հասկանալի է, որ այստեղ 10 մեգաբայթ ստանալու միջոց չկա, բայց այս կլաստերների մեջ ակնհայտորեն կրկնօրինակներ կան։ Դուք չեք կարող նույնիսկ վերականգնել 1 մեգաբայթ այս կերպ: Բայց մենք կարող ենք երաշխավորել, որ մենք կվերականգնենք 3 կիլոբայթ գաղտնի տվյալներ ֆլեշ կրիչից, նույնիսկ այն բանից հետո, երբ այն ֆորմատավորվի և գրվի մինչև հզորությունը: Այնուամենայնիվ, փորձերը ցույց են տալիս, որ նման ֆլեշ կրիչից միանգամայն հնարավոր է հանել 120 կիլոբայթ երկարությամբ ֆայլ:

Վերջին թեստը, ցավոք, ցույց տվեց, որ ամբողջ ֆլեշ կրիչը վերագրված է.

$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile

Ոչ մի կլաստեր չի պահպանվել... Տխուր, բայց ոչ ողբերգական: Նախքան ֆորմատավորումը, եկեք փորձենք ստեղծել միջնորմ ֆլեշ կրիչի վրա, և արդեն դրա մեջ ֆայլային համակարգ: Ի դեպ, գործարանից եկել է հենց այս ֆորմատավորումով, ուստի կասկածելի բան չենք անում։
Միանգամայն սպասելի է, որ ֆլեշ կրիչի հասանելի տարածքը փոքր-ինչ նվազել է:

Նաև միանգամայն սպասելի է, որ 10 մեգաբայթը հնարավոր չէ թաքցնել ամբողջովին լի սկավառակի վրա: Բայց այժմ հաջողությամբ վերծանված կլաստերների թիվը կրկնապատկվել է:

Total clusters read: 250752, decrypted: 405

Ցավոք, անհնար է մի մեգաբայթ հավաքել կտորներից, բայց երկու հարյուր կիլոբայթը հեշտ է:

Դե, վերջին՝ 4-րդ ստուգման մասին լուրն այս անգամ ուրախալի է՝ նման ֆլեշ կրիչի ամբողջական ձևաչափումը չհանգեցրեց ամբողջ տեղեկատվության ոչնչացմանը: 120 կիլոբայթ գաղտնի տվյալներ հիանալի տեղավորվում են չօգտագործված տարածության մեջ:

Թեստի ամփոփ աղյուսակ.

Ստեգանոգրաֆիա ըստ ֆայլերի. տվյալների թաքցնում անմիջապես հատվածներում

Մի փոքր տեսություն՝ ազատ տարածության և չօգտագործված հատվածների մասին

Եթե ​​երբևէ ձեր կոշտ սկավառակը բաժանել եք միջնորմների, կարող եք նկատել, որ միշտ չէ, որ հնարավոր է բոլոր ազատ տարածքը հատկացնել սկավառակի վրա: Առաջին բաժինը միշտ սկսվում է ինչ-որ նահանջով (սովորաբար 1 մեգաբայթ կամ 2048 հատված): Վերջին հատվածի հետևում պատահում է նաև, որ մնում է չօգտագործված հատվածների մի փոքր «պոչ»: Եվ երբեմն հատվածների միջև կան բացեր, թեև հազվադեպ:

Այլ կերպ ասած, սկավառակի վրա կան հատվածներ, որոնք հնարավոր չէ մուտք գործել սկավառակի հետ նորմալ աշխատելու ժամանակ, բայց տվյալները կարող են գրվել այս հատվածներում: Եվ դա նշանակում է նաև կարդալ: Ճշգրտված է այն բանի համար, որ կա նաև բաժանման աղյուսակ և bootloader կոդը, որոնք գտնվում են սկավառակի սկզբի դատարկ տարածքում:

Եկեք մի քիչ ընդմիջենք հատվածներից և, այսպես ասած, թռչնի հայացքից նայենք սկավառակին։ Այստեղ մենք ունենք դատարկ միջնորմ սկավառակի վրա: Եկեք դրա մեջ ստեղծենք ֆայլային համակարգ։ Կարո՞ղ ենք ասել, որ սկավառակի որոշ հատվածներ մնում են չջնջված:

E-e-e - թմբուկի գլորում! Պատասխանը գրեթե միշտ կլինի այո: Իրոք, շատ դեպքերում ֆայլային համակարգի ստեղծումը հանգում է նրան, որ սկավառակի վրա ծառայության տեղեկատվության ընդամենը մի քանի բլոկ է գրվում, իսկ հակառակ դեպքում բաժանման բովանդակությունը չի փոխվում:

Եվ նաև, զուտ էմպիրիկորեն, մենք կարող ենք ենթադրել, որ ֆայլային համակարգը չի կարող միշտ զբաղեցնել իրեն հատկացված ամբողջ տարածքը մինչև վերջին հատվածը: Օրինակ, FAT16 ֆայլային համակարգը 64 կիլոբայթ կլաստերի չափով ակնհայտորեն չի կարող ամբողջությամբ զբաղեցնել 64 կիլոբայթից ոչ բազմապատիկ չափով բաժանումը: Նման հատվածի վերջում պետք է լինի մի քանի հատվածների «պոչ», որն անհասանելի է օգտագործողի տվյալները պահելու համար: Այնուամենայնիվ, այս ենթադրությունը չի կարող հաստատվել փորձնականորեն:

Այսպիսով, ստեգանոգրամի համար հասանելի տարածքը առավելագույնի հասցնելու համար հարկավոր է օգտագործել ֆայլային համակարգ ավելի մեծ կլաստերի չափով: Կարող եք նաև բաժանում ստեղծել, նույնիսկ եթե դա անհրաժեշտ չէ (օրինակ, ֆլեշ կրիչի վրա): Դատարկ հատվածներ ստեղծելու կամ չհատկացված տարածքներ թողնելու կարիք չկա, սա կգրավի շահագրգիռ քաղաքացիների ուշադրությունը:

Օգտակար փորձերի համար

Դուք կարող եք դիպչել կոմունալ ծրագրի աղբյուրի կոդը այստեղ

Կառուցելու համար ձեզ հարկավոր կլինի Qt տարբերակ 5.0 կամ ավելի բարձր և OpenSSL: Եթե ​​ինչ-որ բան չի աշխատում, գուցե ստիպված լինեք խմբագրել steganodisk.pro ֆայլը:

Դուք կարող եք փոխել կլաստերի չափը 4 ԿԲ-ից մինչև, ասենք, 512 բայթ ( secretfile.h-ում): Միևնույն ժամանակ, ծառայության տեղեկատվության արժեքը կաճի. վերնագիրը և ստուգիչ գումարը զբաղեցնում են ֆիքսված 68 բայթ:

Դուք պետք է գործարկեք կոմունալը, իհարկե, root օգտվողի իրավունքներով և զգուշությամբ: Նախքան նշված ֆայլը կամ սարքը վերագրանցելը հարցեր չեն տրվի:

Վայելեք։

Source: www.habr.com

Добавить комментарий