𝗖𝗕𝗖 𝗕𝗶𝘁 𝗙𝗹𝗶𝗽𝗽𝗶𝗻𝗴 સમજૂતી
એન્ક્રિપ્શનનો અર્થ એ નથી કે તમારો ડેટા છેડછાડથી સુરક્ષિત છે.
ઘણા ડેવલપર્સ આ ભૂલ કરે છે. તેઓ વિચારે છે કે જો હુમલાખોર ડેટા વાંચી શકતો નથી, તો તે તેને બદલી પણ શકતો નથી. આ ખોટું છે. ક્રિપ્ટોગ્રાફી ગુપ્તતા (secrecy) અને અખંડિતતા (integrity) ને બે અલગ કાર્યો તરીકે જુએ છે.
CBC Bit Flipping હુમલો આ સાબિત કરે છે. હુમલાખોર તમારી સિક્રેટ કી (secret key) જાણ્યા વગર તમારો ડેટા બદલી શકે છે.
તે કેવી રીતે કામ કરે છે તે અહીં છે:
AES ડેટાને એક મોટા ટુકડામાં એન્ક્રિપ્ટ કરતું નથી. તે ડેટાને 16-બાઇટના બ્લોક્સમાં વિભાજિત કરે છે. CBC મોડમાં, આ બ્લોક્સ એકબીજા સાથે જોડાયેલા હોય છે. પ્રથમ બ્લોકનું એન્ક્રિપ્ટેડ આઉટપુટ બીજા બ્લોકના પ્લેનટેક્સ્ટ (plaintext) માં ભળી જાય છે.
આ ચેઇન ડિક્રિપ્શન દરમિયાન નબળાઈ પેદા કરે છે. બ્લોક 2 ના મૂળ ટેક્સ્ટ મેળવવા માટે, સર્વર તેને ડિક્રિપ્ટ કરે છે અને તેને બ્લોક 1 ના સાયફરટેક્સ્ટ (ciphertext) સાથે જોડે છે.
હુમલાખોર આનો ફાયદો ઉઠાવી શકે છે:
- હુમલાખોર તમારા એન્ક્રિપ્ટેડ ટ્રાફિકને ઇન્ટરસેપ્ટ (intercept) કરે છે.
- તેઓ કી જાણતા નથી, તેથી ડેટા અર્થહીન (gibberish) લાગે છે.
- તેઓ બ્લોક 1 ના સાયફરટેક્સ્ટમાં ચોક્કસ બીટ્સ (bits) બદલે છે.
- તેઓ આ બદલાયેલ ડેટા તમારા સર્વર પર મોકલે છે.
- જ્યારે સર્વર તેને ડિક્રિપ્ટ કરે છે, ત્યારે બ્લોક 1 માં થયેલ ફેરફાર બ્લોક 2 માટેની ગણતરી બદલી નાખે છે.
હુમલાખોરને મેસેજ વાંચવાની જરૂર નથી. તેઓ ફક્ત અંતિમ પરિણામ બદલવા માટે બીટ્સ ફ્લિપ કરે છે.
સેશન્સ માટે એન્ક્રિપ્ટેડ કૂકીઝનો ઉપયોગ કરતા જૂના વેબ એપનો વિચાર કરો. એક કૂકીમાં આ હોઈ શકે છે: userid=994;role=user;
હુમલાખોર આ કૂકીને ઇન્ટરસેપ્ટ કરે છે અને સાયફરટેક્સ્ટમાં બીટ્સ ફ્લિપ કરે છે. જ્યાં સુધી સર્વર એક વિનંતી સ્વીકારતું નથી ત્યાં સુધી તેઓ ઘણી વિનંતીઓ મોકલે છે. કારણ કે સર્વર ફક્ત ડેટા ડિક્રિપ્ટ થાય છે કે નહીં તે જ તપાસે છે, તે સુધારેલા ટેક્સ્ટને પ્રોસેસ કરે છે. અચાનક, ડિક્રિપ્ટ કરેલ સ્ટ્રિંગ આ રીતે દેખાય છે: userid=994;role=admi;
હુમલાખોર પાસે હવે એડમિન એક્સેસ છે. તેઓએ ક્યારેય કી અથવા મૂળ કૂકી વાંચી નથી.
ભૂલ એ માનવામાં છે કે એન્ક્રિપ્શન અખંડિતતા (integrity) ની ખાતરી આપે છે.
- ગોપનીયતા (Confidentiality) લોકોને ડેટા વાંચતા અટકાવે છે.
- અખંડિતતા (Integrity) લોકોને ડેટા બદલતા અટકાવે છે.
આને ઠીક કરવા માટે, AES-GCM જેવું Authenticated Encryption વાપરો. તે એક ક્રિપ્ટોગ્રાફિક ટેગ બનાવે છે. આ ટેગ સીલ (seal) તરીકે કામ કરે છે. જો હુમલાખોર એક બીટ પણ બદલે, તો સીલ તૂટી જાય છે. સર્વર તરત જ ડેટાને નકારી દે છે.
જો તમારે CBC નો ઉપયોગ કરવો જ પડે, તો Encrypt-then-MAC આર્કિટેક્ચરનો ઉપયોગ કરો. સાયફરટેક્સ્ટ માટે ઓથેન્ટિકેશન કોડ બનાવો અને ડિક્રિપ્શન શરૂ કરતા પહેલા તેને વેરિફાય કરો.
ગુપ્ત ડેટા હંમેશા વિશ્વસનીય ડેટા હોતો નથી. નિર્ણયો લેવા માટે તેનો ઉપયોગ કરતા પહેલા હંમેશા સાબિત કરો કે તમારો ડેટા બદલાયો નથી.
CBC Bit-Flipping ની સમજૂતી: શા માટે માત્ર એન્ક્રિપ્શન જ ઇન્ટિગ્રિટીની ખાતરી આપતું નથી
શું તમે ક્યારેય વિચાર્યું છે કે જો તમારો ડેટા એન્ક્રિપ્ટેડ હોય, તો શું તે છેડછાડ (tampering) થી સુરક્ષિત છે?
ઘણીવાર લોકો એવું માને છે કે જો ડેટા એન્ક્રિપ્ટેડ હોય, તો તે સુરક્ષિત છે. પરંતુ, એન્ક્રિપ્શન અને ઇન્ટિગ્રિટી બે અલગ બાબતો છે. એન્ક્રિપ્શન ગોપનીયતા (Confidentiality) પૂરી પાડે છે (એટલે કે, કોઈ ડેટા વાંચી શકતું નથી), પરંતુ તે ઇન્ટિગ્રિટી (Integrity) ની ખાતરી આપતું નથી (એટલે કે, કોઈ ડેટામાં ફેરફાર કરી શકતું નથી).
આ લેખમાં, આપણે CBC (Cipher Block Chaining) મોડમાં 'બીટ-ફ્લિપિંગ એટેક' (Bit-flipping attack) વિશે શીખીશું અને સમજીશું કે શા માટે માત્ર એન્ક્રિપ્શન પૂરતું નથી.
એન્ક્રિપ્શન વિરુદ્ધ ઇન્ટિગ્રિટીની સમસ્યા
સુરક્ષાના સંદર્ભમાં, આ બે ખ્યાલો વચ્ચેનો તફાવત સમજવો ખૂબ જ મહત્વપૂર્ણ છે:
- ગોપનીયતા (Confidentiality): આ સુનિશ્ચિત કરે છે કે માત્ર અધિકૃત વ્યક્તિઓ જ માહિતી વાંચી શકે છે. એન્ક્રિપ્શન આ માટે વપરાય છે.
- ઇન્ટિગ્રિટી (Integrity): આ સુનિશ્ચિત કરે છે કે માહિતીમાં કોઈ અનધિકૃત ફેરફાર કરવામાં આવ્યો નથી.
તમે ડેટાને છુપાવી શકો છો (ગોપનીયતા), પરંતુ જો કોઈ તે છુપાયેલા ડેટામાં ફેરફાર કરી શકે અને તમને ખબર પણ ન પડે, તો તમારી ઇન્ટિગ્રિટી તૂટી જાય છે. CBC મોડમાં બીટ-ફ્લિપિંગ એટેક આ જ નબળાઈનો લાભ લે છે.
CBC મોડ કેવી રીતે કામ કરે છે?
CBC મોડમાં, દરેક પ્લેનટેક્સ્ટ બ્લોકને એન્ક્રિપ્ટ કરતા પહેલા અગાઉના સાયફરટેક્સ્ટ બ્લોક સાથે XOR કરવામાં આવે છે.
તેનું ગાણિતિક સૂત્ર આ મુજબ છે: $C_i = E_k(P_i \oplus C_{i-1})$
જ્યાં:
- $C_i$ એ વર્તમાન સાયફરટેક્સ્ટ બ્લોક છે.
- $P_i$ એ વર્તમાન પ્લેનટેક્સ્ટ બ્લોક છે.
- $C_{i-1}$ એ અગાઉનો સાયફરટેક્સ્ટ બ્લોક છે.
- $E_k$ એ એન્ક્રિપ્શન ફંક્શન છે.
ડિક્રિપ્શન દરમિયાન, પ્રક્રિયા આ રીતે થાય છે: $P_i = D_k(C_i) \oplus C_{i-1}$
અહીં મહત્વની વાત એ છે કે, પ્લેનટેક્સ્ટ બ્લોક $P_i$ ને મેળવવા માટે, ડિક્રિપ્ટેડ સાયફરટેક્સ્ટ $D_k(C_i)$ ને અગાઉના સાયફરટેક્સ્ટ બ્લોક $C_{i-1}$ સાથે XOR કરવામાં આવે છે.
બીટ-ફ્લિપિંગ એટેક (Bit-Flipping Attack) ની સમજૂતી
બીટ-ફ્લિપિંગ એટેક ત્યારે થાય છે જ્યારે કોઈ હુમલાખોર સાયફરટેક્સ્ટના કોઈ ચોક્કસ બીટમાં ફેરફાર કરે છે, જેનાથી ડિક્રિપ્શન પછી પ્લેનટેક્સ્ટમાં એક ચોક્કસ અને અનુમાનિત ફેરફાર થાય છે.
CBC મોડમાં, જો હુમલાખોર અગાઉના બ્લોક $C_{i-1}$ માં ફેરફાર કરે છે, તો તે સીધી રીતે પછીના પ્લેનટેક્સ્ટ બ્લોક $P_i$ ને અસર કરે છે.
જો હુમલાખોર $C_{i-1}$ ને $C'_{i-1}$ માં બદલે છે, તો નવો પ્લેનટેક્સ્ટ બ્લોક $P'_i$ આ રીતે હશે: $P'i = D_k(C_i) \oplus C'{i-1}$
આનો અર્થ એ છે કે હુમલાખોર પ્લેનટેક્સ્ટમાં જે ફેરફાર કરવા માંગતો હોય તે કરી શકે છે. જો હુમલાખોર $C_{i-1}$ માં $X$ જેટલો ફેરફાર કરે છે, તો $P_i$ માં પણ તેટલો જ ફેરફાર થશે.
એક વ્યવહારિક ઉદાહરણ
ધારો કે આપણી પાસે એક એન્ક્રિપ્ટેડ મેસેજ છે જે પ્લેનટેક્સ્ટ તરીકે આ છે:
user_id=123;admin=0
ધારો કે admin=0 વાળો ભાગ બીજા બ્લોકમાં આવે છે. હુમલાખોર આ મેસેજ વાંચી શકતો નથી (કારણ કે તે એન્ક્રિપ્ટેડ છે), પરંતુ તે મેસેજનું માળખું (format) જાણે છે.
જો હુમલાખોર અગાઉના સાયફરટેક્સ્ટ બ્લોક ($C_{i-1}$) ના અમુક બીટ્સ બદલી નાખે, તો ડિક્રિપ્શન પછી admin=0 બદલાઈને admin=1 થઈ શકે છે! હુમલાખોરને માત્ર એટલું જ જાણવું પડે છે કે કયા બીટને બદલવાથી desired (ઇચ્છિત) પરિણામ મળશે.
બીટ-ફ્લિપિંગ એટેકથી કેવી રીતે બચવું?
માત્ર એન્ક્રિપ્શન પૂરતું નથી; આપણે એ પણ ખાતરી કરવી જોઈએ કે ડેટા સાથે છેડછાડ કરવામાં આવી નથી. આ માટે નીચેની પદ્ધતિઓ વાપરી શકાય છે:
1. Authenticated Encryption (AEAD) નો ઉપયોગ કરો
આધુનિક એન્ક્રિપ્શન મોડ્સ જેમ કે AES-GCM (Galois/Counter Mode) એન્ક્રિપ્શન અને ઓથેન્ટિકેશન બંને એકસાથે પૂરા પાડે છે. જો સાયફરટેક્સ્ટમાં એક પણ બીટ બદલાય, તો ડિક્રિપ્શન પ્રક્રિયા નિષ્ફળ જશે અને તમને ખબર પડી જશે કે ડેટા સાથે છેડછાડ થઈ છે.
2. HMAC (Hash-based Message Authentication Code) નો ઉપયોગ કરો
જો તમે CBC મોડનો ઉપયોગ કરી રહ્યા હોવ, તો એન્ક્રિપ્શન પછી મેસેજ પર HMAC લગાવો (Encrypt-then-MAC અભિગમ). આનાથી તમે ખાતરી કરી શકશો કે સાયફરટેક્સ્ટ બદલાયો નથી.
નિષ્કર્ષ
એન્ક્રિપ્શન ડેટાને છુપાવે છે, પરંતુ તે ડેટાની અખંડિતતા (integrity) ની રક્ષા કરતું નથી. CBC મોડ જેવા બ્લોક સાયફર્સમાં બીટ-ફ્લિપિંગ એટેક એ એક ગંભીર જોખમ છે. હંમેશા Authenticated Encryption નો ઉપયોગ કરવાનો આગ્રહ રાખો જેથી તમારી સુરક્ષા મજબૂત રહે.