ఒక చిన్న ముందుమాట
స్టెగానోగ్రఫీ, ఎవరికైనా గుర్తులేకపోతే, కొన్ని కంటైనర్లలో సమాచారాన్ని దాచడం. ఉదాహరణకు, చిత్రాలలో (చర్చించబడింది
మోసపూరిత అల్గారిథమ్లు మరియు డేటాతో సూక్ష్మమైన అవకతవకలు లేకుండా చేయడం మరియు ఇప్పటికీ కంటైనర్ యొక్క కార్యాచరణను మరియు దాచిన డేటా యొక్క ఆమోదయోగ్యమైన భద్రతను నిర్ధారించడం సాధ్యమేనా? ముందుకు చూస్తూ, నేను చెబుతాను - అవును, మీరు చేయగలరు! నేను మీకు ఒక ప్రయోజనాన్ని కూడా అందిస్తాను.
పద్ధతి యొక్క బ్లడీ వివరాలు
ప్రాథమిక ఆలోచన నుదిటికి దెబ్బ తగిలినంత సులభం: ఆపరేటింగ్ సిస్టమ్ ఎప్పుడూ వ్రాయని (లేదా అరుదైన సందర్భాల్లో వ్రాసే) డిస్క్లో ప్రాంతాలు ఉన్నాయి. మోసపూరిత అల్గారిథమ్లను ఉపయోగించి ఈ ప్రాంతాలను శోధించవలసిన అవసరాన్ని నివారించడానికి, మేము రిడెండెన్సీని ఉపయోగిస్తాము - అంటే, మేము మా దాచిన సమాచారాన్ని డిస్క్లోని అన్ని రంగాలలో చాలా సార్లు నకిలీ చేస్తాము. అప్పుడు, ఈ వైభవం పైన, మీరు అవసరమైన విభజనలను సృష్టించవచ్చు, ఫైల్ సిస్టమ్లను ఫార్మాట్ చేయవచ్చు, ఫైల్లను వ్రాయవచ్చు మరియు OS లను ఇన్స్టాల్ చేయవచ్చు - ఒకే విధంగా, రహస్య డేటాలో కొంత భాగం సేవ్ చేయబడుతుంది మరియు తిరిగి పొందవచ్చు మరియు పునరావృతమయ్యే నకిలీ మాకు సహాయపడుతుంది. ముక్కల నుండి అసలు మొత్తాన్ని కలిపి ఉంచండి.
ఈ పద్ధతి యొక్క ప్రయోజనం స్పష్టంగా ఉంది: మేము ఫైల్ ఫార్మాట్పై లేదా ఉపయోగించిన ఫైల్ సిస్టమ్ రకంపై కూడా ఆధారపడము.
ప్రతికూలతలు కూడా, నేను అనుకుంటున్నాను, స్పష్టంగా ఉన్నాయి:
- సీక్రెట్ డేటా మొత్తం డిస్క్ను పూర్తిగా తిరిగి వ్రాయడం ద్వారా మాత్రమే మార్చబడుతుంది, ఆ తర్వాత వినియోగదారుకు కనిపించే కంటెంట్ను మళ్లీ సృష్టించడం ద్వారా మాత్రమే మార్చబడుతుంది. అయితే, మీరు చిత్రం నుండి డిస్క్ను పునఃసృష్టించే సాఫ్ట్వేర్ను ఉపయోగించలేరు: ఇది మునుపటి రహస్య డేటాను కూడా పునఃసృష్టిస్తుంది.
- రహస్య డేటా యొక్క పెద్ద పరిమాణం, కొంత సమాచారాన్ని కోల్పోయే అవకాశం ఎక్కువ.
- డిస్క్ నుండి డేటాను తిరిగి పొందడానికి చాలా సమయం పట్టవచ్చు. చాలా నిమిషాల నుండి చాలా రోజుల వరకు (ఆధునిక డిస్కులు పెద్దవి).
ఇప్పుడు ప్రత్యేకతలకు వెళ్దాం.
మీరు డిస్క్ అంతటా రహస్య డేటాను స్మెర్ చేస్తే, అది కంటితో మాత్రమే దాచబడుతుంది. మీరు మీ చూపును డిస్క్ ఎడిటర్తో సన్నద్ధం చేస్తే, డేటా దాని వైభవంగా కనిపిస్తుంది. అందువల్ల, డేటా కనిపించకుండా గుప్తీకరించడం మంచిది. మేము సరళంగా, కానీ రుచిగా ఎన్క్రిప్ట్ చేస్తాము: aes256-cbc అల్గోరిథం ఉపయోగించి. మేము వినియోగదారుని ఎన్క్రిప్షన్ కీ కోసం అడుగుతాము మరియు అతనిని మంచి పాస్వర్డ్తో రానివ్వండి.
చెడు డేటా నుండి “మంచి” డేటాను ఎలా వేరు చేయవచ్చు అనేది తదుపరి ప్రశ్న. ఇక్కడ చెక్సమ్ మాకు సహాయం చేస్తుంది, కానీ సాధారణమైనది కాదు, SHA1. ఇంకా ఏంటి? ఇది జిట్కి సరిపోతుంది, కాబట్టి ఇది మనకు కూడా సరిపోతుంది. నిర్ణయించబడింది: మేము నిల్వ చేసిన ప్రతి సమాచారాన్ని చెక్సమ్తో అందిస్తాము మరియు డీక్రిప్షన్ తర్వాత అది సరిపోలితే, డీక్రిప్షన్ విజయవంతమైందని అర్థం.
మీకు ఫ్రాగ్మెంట్ నంబర్ మరియు రహస్య డేటా మొత్తం పొడవు కూడా అవసరం. శకలం సంఖ్య అనేది మనం ఇప్పటికే ఏ ముక్కలను అర్థంచేసుకున్నామో మరియు ఏవి మిగిలి ఉన్నాయో ట్రాక్ చేయడం. చివరి భాగాన్ని ప్రాసెస్ చేస్తున్నప్పుడు మొత్తం పొడవు మాకు ఉపయోగకరంగా ఉంటుంది, తద్వారా అనవసరమైన డేటాను వ్రాయకూడదు (అంటే, పాడింగ్). సరే, మనకు ఇప్పటికీ హెడర్ ఉన్నందున, మేము అక్కడ రహస్య ఫైల్ పేరును జోడిస్తాము. డిక్రిప్షన్ తర్వాత ఇది ఉపయోగకరంగా ఉంటుంది, కాబట్టి దీన్ని ఎలా తెరవాలో ఊహించకూడదు.
ఆచరణలో పద్ధతిని పరీక్షిస్తోంది
తనిఖీ చేయడానికి, అత్యంత సాధారణ మాధ్యమాన్ని తీసుకుందాం - ఫ్లాష్ డ్రైవ్. నేను 1 GB సామర్థ్యంతో పాతదాన్ని కనుగొన్నాను, ఇది ప్రయోగాలకు చాలా అనుకూలంగా ఉంటుంది. మీరు, నాలాగే, భౌతిక మీడియాతో బాధపడకుండా, ఫైల్లో - డిస్క్ ఇమేజ్లో పరీక్షించాలనే ఆలోచనతో వస్తే, నేను వెంటనే చెబుతాను: ఇది పని చేయదు. అటువంటి "డిస్క్" ను ఫార్మాట్ చేస్తున్నప్పుడు, Linux ఫైల్ను మళ్లీ సృష్టిస్తుంది మరియు ఉపయోగించని అన్ని రంగాలు సున్నాలతో నింపబడతాయి.
లైనక్స్తో కూడిన మెషీన్గా, దురదృష్టవశాత్తు, నేను బాల్కనీలో పడుకున్న రాస్ప్బెర్రీ పై 3లో వాతావరణ స్టేషన్ను ఉపయోగించాల్సి వచ్చింది, కాబట్టి మేము పెద్ద ఫైల్లను దాచము. మేము గరిష్టంగా 10 మెగాబైట్ల పరిమాణానికి పరిమితం చేస్తాము. చాలా చిన్న ఫైల్లను దాచడంలో కూడా ఎటువంటి పాయింట్ లేదు: యుటిలిటీ 4 KB క్లస్టర్లలో డేటాను డిస్క్కి వ్రాస్తుంది. అందువల్ల, దిగువన మనం 3 kb ఫైల్కి పరిమితం చేస్తాము - ఇది అటువంటి క్లస్టర్కి సరిపోతుంది.
మేము ఫ్లాష్ డ్రైవ్ను దశలవారీగా ఎగతాళి చేస్తాము, దాచిన సమాచారం చదవగలిగేలా ప్రతి దశ తర్వాత తనిఖీ చేస్తుంది:
- 16 KB క్లస్టర్ పరిమాణంతో FAT16 ఫార్మాట్లో ఫాస్ట్ ఫార్మాటింగ్. ఫైల్ సిస్టమ్ లేని ఫ్లాష్ డ్రైవ్తో దీన్ని Windows 7 అందిస్తుంది.
- అన్ని రకాల చెత్తతో ఫ్లాష్ డ్రైవ్ను 50% నింపడం.
- అన్ని రకాల చెత్తతో ఫ్లాష్ డ్రైవ్ను 100% నింపడం.
- 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 సెక్టార్లు). చివరి విభాగం వెనుక, ఉపయోగించని రంగాల యొక్క చిన్న "తోక" మిగిలి ఉండటం కూడా జరుగుతుంది. మరియు కొన్నిసార్లు విభాగాల మధ్య ఖాళీలు ఉన్నాయి, అయితే అరుదుగా.
మరో మాటలో చెప్పాలంటే, డిస్క్తో సాధారణ పని సమయంలో యాక్సెస్ చేయలేని డిస్క్లో సెక్టార్లు ఉన్నాయి, కానీ ఈ రంగాలకు డేటా వ్రాయబడుతుంది! మరియు అది కూడా చదవడం అని అర్థం. డిస్క్ ప్రారంభంలో ఖాళీ ప్రాంతంలో ఉన్న విభజన పట్టిక మరియు బూట్లోడర్ కోడ్ కూడా ఉన్నాయనే వాస్తవం కోసం సర్దుబాటు చేయబడింది.
కాసేపు సెక్షన్ల నుండి విరామం తీసుకుని, డిస్క్ని బర్డ్ ఐ వ్యూ నుండి చూద్దాం. ఇక్కడ మనకు డిస్క్లో ఖాళీ విభజన ఉంది. అందులో ఫైల్ సిస్టమ్ క్రియేట్ చేద్దాం. డిస్క్లోని కొన్ని సెక్టార్లు తొలగించబడలేదని మనం చెప్పగలమా?
E-e-e - డ్రమ్ రోల్! సమాధానం దాదాపు ఎల్లప్పుడూ అవును! నిజమే, చాలా సందర్భాలలో, ఫైల్ సిస్టమ్ను సృష్టించడం అనేది డిస్క్కు కొన్ని సేవా సమాచారాన్ని మాత్రమే వ్రాయడానికి వస్తుంది మరియు లేకపోతే విభజన యొక్క కంటెంట్లు మారవు.
మరియు - పూర్తిగా అనుభవపూర్వకంగా - ఫైల్ సిస్టమ్ చివరి సెక్టార్ వరకు కేటాయించిన మొత్తం స్థలాన్ని ఎల్లప్పుడూ ఆక్రమించదని మేము భావించవచ్చు. ఉదాహరణకు, 16 కిలోబైట్ల క్లస్టర్ పరిమాణం కలిగిన FAT64 ఫైల్ సిస్టమ్ 64 కిలోబైట్ల గుణకం లేని పరిమాణంతో విభజనను పూర్తిగా ఆక్రమించదు. అటువంటి విభాగం చివరిలో వినియోగదారు డేటాను నిల్వ చేయడానికి ప్రాప్యత చేయలేని అనేక రంగాల "తోక" ఉండాలి. అయితే, ఈ ఊహ ప్రయోగాత్మకంగా నిర్ధారించబడలేదు.
కాబట్టి, స్టెగానోగ్రామ్ కోసం అందుబాటులో ఉన్న స్థలాన్ని పెంచడానికి, మీరు పెద్ద క్లస్టర్ పరిమాణంతో ఫైల్ సిస్టమ్ను ఉపయోగించాలి. ఇది అవసరం లేకపోయినా (ఫ్లాష్ డ్రైవ్లో, ఉదాహరణకు) మీరు విభజనను కూడా సృష్టించవచ్చు. ఖాళీ విభాగాలను సృష్టించడం లేదా కేటాయించని ప్రాంతాలను వదిలివేయడం అవసరం లేదు - ఇది ఆసక్తిగల పౌరుల దృష్టిని ఆకర్షిస్తుంది.
ప్రయోగాల కోసం యుటిలిటీ
మీరు యుటిలిటీ యొక్క సోర్స్ కోడ్ను తాకవచ్చు
నిర్మించడానికి, మీకు Qt వెర్షన్ 5.0 లేదా అంతకంటే ఎక్కువ మరియు OpenSSL అవసరం. ఏదైనా పని చేయకపోతే, మీరు steganodisk.pro ఫైల్ను సవరించాల్సి ఉంటుంది.
మీరు క్లస్టర్ పరిమాణాన్ని 4 KB నుండి 512 బైట్లకు మార్చవచ్చు (secretfile.hలో). అదే సమయంలో, సేవా సమాచారం యొక్క ధర పెరుగుతుంది: హెడర్ మరియు చెక్సమ్ స్థిరమైన 68 బైట్లను ఆక్రమిస్తాయి.
మీరు రూట్ యూజర్ హక్కులతో మరియు జాగ్రత్తగా యుటిలిటీని అమలు చేయాలి. పేర్కొన్న ఫైల్ లేదా పరికరాన్ని ఓవర్రైట్ చేయడానికి ముందు ఎటువంటి ప్రశ్నలు అడగబడవు!
ఆనందించండి.
మూలం: www.habr.com