𝗖𝗕𝗖 𝗕𝗶𝘁 𝗙𝗹𝗶𝗽𝗽𝗶𝗻𝗴 𝘃𝗶𝘃𝗮𝗿𝗮𝗻𝗮

ఎన్‌క్రిప్షన్ (Encryption) అంటే మీ డేటా మార్పులకు (tampering) గురికాకుండా సురక్షితంగా ఉందని అర్థం కాదు.

చాలా మంది డెవలపర్లు ఈ తప్పు చేస్తారు. ఒక అటాకర్ (attacker) డేటాను చదవలేకపోతే, దానిని మార్చలేరని వారు అనుకుంటారు. ఇది తప్పు. క్రిప్టోగ్రఫీ (Cryptography) లో రహస్యత (secrecy) మరియు సమగ్రత (integrity) అనేవి రెండు వేర్వేరు పనులు.

CBC Bit Flipping అటాక్ దీనిని నిరూపిస్తుంది. మీ సీక్రెట్ కీ (secret key) తెలియకపోయినా ఒక అటాకర్ మీ డేటాను మార్చగలడు.

ఇది ఎలా పనిచేస్తుందో ఇక్కడ చూడండి:

AES డేటాను ఒకే పెద్ద ముక్కగా ఎన్‌క్రిప్ట్ చేయదు. ఇది డేటాను 16-బైట్ బ్లాక్‌లుగా విభజిస్తుంది. CBC మోడ్‌లో, ఈ బ్లాక్‌లు ఒకదానితో ఒకటి అనుసంధానించబడి (chain) ఉంటాయి. మొదటి బ్లాక్ యొక్క ఎన్‌క్రిప్ట్ చేయబడిన అవుట్‌పుట్, రెండవ బ్లాక్ యొక్క ప్లెయిన్ టెక్స్ట్ (plaintext) లో కలిసిపోతుంది.

ఈ చైన్ డీక్రిప్షన్ సమయంలో ఒక బలహీనతను సృష్టిస్తుంది. బ్లాక్ 2 యొక్క అసలు టెక్స్ట్‌ను పొందడానికి, సర్వర్ దానిని డీక్రిప్ట్ చేసి, బ్లాక్ 1 నుండి వచ్చిన సైఫర్‌టెక్స్ట్ (ciphertext) తో కలుపుతుంది.

ఒక అటాకర్ దీనిని ఇలా ఉపయోగించుకోవచ్చు:

అటాకర్‌కు సందేశాన్ని చదవాల్సిన అవసరం లేదు. వారు తుది ఫలితాన్ని మార్చడానికి కేవలం బిట్‌లను మారుస్తారు (flip).

సెషన్ల కోసం ఎన్‌క్రిప్ట్ చేయబడిన కుకీలను ఉపయోగించే ఒక పాత వెబ్ యాప్‌ను పరిగణనలోకి తీసుకోండి. ఒక కుకీ ఇలా ఉండవచ్చు: userid=994;role=user;

అటాకర్ ఈ కుకీని మధ్యలోనే అందుకుని, సైఫర్‌టెక్స్ట్‌లోని బిట్‌లను మారుస్తారు. సర్వర్ ఒక రిక్వెస్ట్‌ను అంగీకరించే వరకు వారు అనేక రిక్వెస్ట్‌లను పంపుతారు. సర్వర్ కేవలం డేటా డీక్రిప్ట్ అవుతుందో లేదో మాత్రమే తనిఖీ చేస్తుంది కాబట్టి, అది మార్చబడిన టెక్స్ట్‌ను ప్రాసెస్ చేస్తుంది. అకస్మాత్తుగా, డీక్రిప్ట్ చేయబడిన స్ట్రింగ్ ఇలా ఉంటుంది: userid=994;role=admi;

ఇప్పుడు అటాకర్‌కు అడ్మిన్ యాక్సెస్ (admin access) లభిస్తుంది. వారు కీని గానీ లేదా అసలు కుకీని గానీ ఎప్పుడూ చదవలేదు.

ఎన్‌క్రిప్షన్ అనేది సమగ్రతను (integrity) హామీ ఇస్తుందని అనుకోవడమే పొరపాటు.

దీనిని సరిచేయడానికి, AES-GCM వంటి అథెంటికేటెడ్ ఎన్‌క్రిప్షన్ (Authenticated Encryption) ఉపయోగించండి. ఇది ఒక క్రిప్టోగ్రాఫిక్ ట్యాగ్‌ను సృష్టిస్తుంది. ఈ ట్యాగ్ ఒక సీల్ (seal) లాగా పనిచేస్తుంది. ఒక అటాకర్ ఒక్క బిట్‌ను మార్చినా, ఆ సీల్ విడిపోతుంది. సర్వర్ వెంటనే ఆ డేటాను తిరస్కరిస్తుంది.

మీరు తప్పనిసరిగా CBCని ఉపయోగించాల్సి వస్తే, Encrypt-then-MAC ఆర్కిటెక్చర్‌ను ఉపయోగించండి. సైఫర్‌టెక్స్ట్ కోసం ఒక అథెంటికేషన్ కోడ్‌ను సృష్టించి, డీక్రిప్షన్ ప్రారంభించే ముందు దానిని ధృవీకరించండి.

రహస్య డేటా ఎప్పుడూ నమ్మదగిన డేటా కాకపోవచ్చు. నిర్ణయాలు తీసుకోవడానికి మీ డేటాను ఉపయోగించే ముందు, అది మార్చబడలేదని ఎల్లప్పుడూ నిరూపించుకోండి.

CBC Bit-Flipping వివరణ: ఎన్‌క్రిప్షన్ మాత్రమే ఎందుకు ఇంటిగ్రిటీని (Integrity) గ్యారెంటీ చేయదు

మనం ఎన్‌క్రిప్షన్ గురించి ఆలోచించినప్పుడు, తరచుగా డేటా గోప్యత (confidentiality) గురించి మాత్రమే ఆలోచిస్తాము. అంటే, అనధికార వ్యక్తులు డేటాను చదవలేరు అని అర్థం. కానీ, డేటా మార్చబడలేదని (integrity) ఎన్‌క్రిప్షన్ మాత్రమే హామీ ఇవ్వదు.

డేటా యొక్క సమగ్రతను (integrity) కాపాడటం మరియు దానిని గోప్యంగా ఉంచడం (confidentiality) అనేవి రెండు వేర్వేరు అంశాలు. ఈ వ్యాసంలో, CBC (Cipher Block Chaining) మోడ్‌లో ఉండే ఒక భద్రతా లోపాన్ని, అంటే Bit-flipping attack గురించి తెలుసుకుందాం.

CBC మోడ్ ఎలా పనిచేస్తుంది?

CBC (Cipher Block Chaining) అనేది బ్లాక్ సైఫర్ మోడ్‌లలో ఒకటి. ఇందులో ప్రతి ప్లెయిన్‌టెక్స్ట్ బ్లాక్, తన ముందున్న సైఫర్‌టెక్స్ట్ బ్లాక్‌తో XOR చేయబడి, ఆపై ఎన్‌క్రిప్ట్ చేయబడుతుంది.

దీని గణిత సూత్రం ఇలా ఉంటుంది:

$C_i = E_k(P_i \oplus C_{i-1})$

ఇక్కడ:

డీక్రిప్షన్ సమయంలో ప్రక్రియ రివర్స్‌లో జరుగుతుంది:

$P_i = D_k(C_i) \oplus C_{i-1}$

ఇక్కడ $D_k$ అనేది డీక్రిప్షన్ ఫంక్షన్.

బిట్-ఫ్లిప్పింగ్ అటాక్ (The Bit-Flipping Attack)

పైన పేర్కొన్న డీక్రిప్షన్ సూత్రాన్ని గమనిస్తే, ఒక ముఖ్యమైన విషయం అర్థమవుతుంది: $P_i$ (ప్రస్తుత ప్లెయిన్‌టెక్స్ట్) అనేది $C_{i-1}$ (ముందున్న సైఫర్‌టెక్స్ట్) పై నేరుగా ఆధారపడి ఉంటుంది.

ఒక అటాకర్ సైఫర్‌టెక్స్ట్‌లోని $C_{i-1}$ బ్లాక్‌లో ఒక బిట్‌ను మారిస్తే, అది డీక్రిప్ట్ అయినప్పుడు $P_i$ బ్లాక్‌లో కూడా అదే స్థానంలో ఒక మార్పును కలిగిస్తుంది.

గణితపరంగా చూస్తే: ఒకవేళ అటాకర్ $C_{i-1}$ ని $C'_{i-1}$ గా మారిస్తే, కొత్త ప్లెయిన్‌టెక్స్ట్ $P'_i$ ఇలా ఉంటుంది:

$P'i = D_k(C_i) \oplus C'{i-1}$

దీనివల్ల ప్లెయిన్‌టెక్స్ట్‌లో వచ్చే మార్పు ($\Delta P$): $\Delta P = P_i \oplus P'i = C{i-1} \oplus C'_{i-1}$

అంటే, అటాకర్ సైఫర్‌టెక్స్ట్‌లో చేసే మార్పు, ప్లెయిన్‌టెక్స్ట్‌లో కూడా ఖచ్చితంగా ఊహించదగిన మార్పును కలిగిస్తుంది.

ఒక ఉదాహరణ

ధరను (price) కలిగి ఉన్న ఒక సందేశాన్ని ఊహించుకుందాం: amount=0100.

ఈ సందేశం CBC మోడ్‌లో ఎన్‌క్రిప్ట్ చేయబడి సైఫర్‌టెక్స్ట్‌గా మార్చబడింది. ఒక అటాకర్ ఈ సైఫర్‌టెక్స్ట్‌లోని ఒక నిర్దిష్ట బిట్‌ను మారిస్తే, డీక్రిప్ట్ అయినప్పుడు ఆ విలువ amount=9100 గా మారే అవకాశం ఉంది. అటాకర్ అసలు డేటా ఏమిటో తెలియకపోయినా, కేవలం బిట్‌లను మార్చడం ద్వారా డేటాను తనకు అనుకూలంగా మార్చుకోగలడు.

ఇక్కడ గమనించాల్సిన విషయం ఏమిటంటే:

  1. అటాకర్ డేటాను చదవలేడు (Confidentiality intact).
  2. కానీ, డేటాను మార్చగలుగుతున్నాడు (Integrity compromised).

దీనిని ఎలా నివారించాలి?

కేవలం ఎన్‌క్రిప్షన్ మాత్రమే డేటా సమగ్రతను (integrity) కాపాడలేదు. దీనిని నివారించడానికి మనం Authenticated Encryption పద్ధతులను ఉపయోగించాలి.

ప్రధానంగా రెండు మార్గాలు ఉన్నాయి:

  1. HMAC (Hash-based Message Authentication Code): ఎన్‌క్రిప్షన్ చేసిన తర్వాత, ఆ సైఫర్‌టెక్స్ట్‌పై ఒక HMACని లెక్కించి పంపాలి. డీక్రిప్షన్ చేసే ముందు, ఆ HMAC సరిగ్గా ఉందో లేదో తనిఖీ చేయాలి. దీనివల్ల డేటాలో చిన్న మార్పు జరిగినా అది వెంటనే తెలిసిపోతుంది.
  2. AEAD (Authenticated Encryption with Associated Data): ఆధునిక పద్ధతులు అయిన AES-GCM లేదా ChaCha20-Poly1305 వంటివి ఎన్‌క్రిప్షన్ మరియు ఇంటిగ్రిటీని ఒకేసారి అందిస్తాయి. ఇవి బిట్-ఫ్లిప్పింగ్ వంటి అటాక్‌ల నుండి డేటాను సమర్థవంతంగా రక్షిస్తాయి.

ముగింపు

ఎన్‌క్రిప్షన్ అనేది డేటాను రహస్యంగా ఉంచడానికి మాత్రమే ఉపయోగపడుతుంది. మీరు పంపే డేటా మార్చబడలేదని నిర్ధారించుకోవడానికి, ఎల్లప్పుడూ ఇంటిగ్రిటీ చెక్ (Integrity check) లేదా AEAD మోడ్‌లను ఉపయోగించడం అత్యవసరం.