בגלל המגבלות יש צורך לחלק את הדיסק למקטעים או סקטורים בגודל קבוע ולהצפינם בנפרד ללא תלות באחרים. לכן הדרך הטובה ביותר היא צופן בלוקים או צופן בלוקים בר התאמה. כדי לשנות בית מסוים בקובץ מסוים צריך לפענח את הסקטורים בהם מצוי הקובץ, לבצע את השינוי ולהצפינם מחדש. גודל הסקטור נקבע בהתאם למספר מאפיינים. סקטורים גדולים מדי מקשים על גישה ישירה כי צריך לפענח כמות גדולה יותר של מידע בכל פעולת שינוי, לעומתם סקטורים קטנים מאטים את ההצפנה. דרישה (א) מוגדרת בהתאם לסוג האיום. ההנחה הבסיסית היא שליריב גישה לאמצעי האחסון והוא מסוגל לקרוא מידע מוצפן בכל רגע נתון אך אין לו גישה למפתחות ההצפנה, מסיבה זו רצוי שלא תהיה לו יכולת לזהות בלוקים זהים, כלומר עמידות כנגד התקפת גלוי-נבחר. בהגדרה מחמירה יותר מניחים שהיריב מסוגל לבקש הצפנה של כל קובץ לפי בחירתו ואחסונו בכונן מבלי לראות את מפתח ההצפנה (למשל אם התוקף שם ידו על חומרה בתוכה מוטמע המפתח באופן שלא ניתן לחשיפה והוא יכול להפעילה כקופסה שחורה), הגדרה זו מתאימה להתקפת מוצפן-נבחר. הגדרה יותר מחמירה מציבה אתגר נוסף, היריב מסוגל לפענח סקטורים באזורים מסוימים במדיית האחסון, לכן יש למנוע מצב שבו התוקף פשוט יעתיק סקטור מוצפן שנמצא באזור בו אין לו יכולת פענוח לאזור אחר בדיסק שבו הוא יכול לבקש פענוח.
בהצפנת דיסקים קיימות מגבלות מובנות שלא ניתנות לפתרון והם:
מצבי ההפעלה הרגילים כמו ECB, CBC, OFB או CTR אינם מתאימים מפני כמה סיבות:
בשל החסרונות האמורים ישנן שלוש התקפות עיקריות נגד הצפנת דיסקים שתמיד ניתנות לביצוע:
ביטחון הצפנת דיסקים הוא לכל היותר כמו מצב ECB עם מפתח שונה עבור כל בלוק. או לחלופין אפשר להציג זאת כצופן בלוקים שבו הבלוק הוא בדיוק באורך הסקטור. אם הסקטור גדול מהבלוק שהצופן מקבל מחלקים את הסקטור לבלוקים בגודל הרצוי ומפעילים את ההצפנה על כל הבלוקים באופן איטרטיבי באופן ששני בלוקים זהים יפיקו תוצאה מוצפנת שונה. כדי להבטיח את דרישה (א) יש להצפין כל סקטור עם מפתח אחר. במקום לאחסן מפתחות רבים אפשר להשתמש במפתח 'מאסטר' יחיד ממנו מפיקים מפתחות הצפנה ככל שיידרש, למשל על ידי הצפנה של ערך ייחודי וחד פעמי עבור כל סקטור שנקרא tweak המשרת כמו וקטור אתחול, ה-tweak לא חייב להיות אקראי או סודי, למשל המספר הסידורי של הסקטור יספיק. החיסרון בזה הוא שכעת יש צורך להפעיל את צופן הבלוקים formula_1 פעמים עבור formula_2 סקטורים. עבור כל סקטור צריך תחילה להצפין את ה-tweak ממנו מייצרים מפתח הצפנה ואיתו מצפינים את הסקטור. אפשר להימנע מכך על ידי הצפנה של tweak עם תמורה פסאודו-אקראית מהירה במקום עם צופן הבלוקים, דהיינו המידע מעורבב (ממוסך) באמצעות XOR עם מפתח שנגזר מהפונקציה, כך מרוויחים שצופן הבלוקים מופעל רק פעם אחת והפונקציה הפסאודו-רנדומלית מבטיחה שלא ייווצר מצב ששני בלוקים יוצפנו עם אותו מפתח על ידי שימוש באינדקס הבלוק כמו במצב מונה. בגלל השימוש ב-XOR לא רצוי מטעמי ביטחון להשתמש ב-tweak עצמו ישירות כמפתח לפונקציית ה-PRP אלא מקובל להצפינו תחילה, לכן משמשים בשני מפתחות הצפנה נפרדים. כלומר עבור כל סקטור תחילה מצפינים את ה-tweak (מספר הסקטור) עם מפתח ההצפנה הראשון, מהתוצאה מייצרים מפתחות מיסוך עבור כל הבלוקים שהסקטור מכיל ובאמצעות המפתח השני מצפינים את כולם עם צופן הבלוקים. זו השיטה המועדפת מהיבט של ביטחון ויעילות. הפעלת צופן הבלוקים מתבצעת רק formula_3 פעמים ופונקציית ה-PRP מהירה כך שהיא זניחה ביחס לצופן הבלוקים.
מספר מצבי הפעלה עוצבו בשיטה זו, ביניהם אפשר לציין את: LRW, XEX ו-XTS. מצב ההפעלה LRW שהוצע על ידי ליסקוב, ריבסט ווגנר הוא פרימיטיב קריפטוגרפי שמיישם את רעיון צופן בלוקים שניתן להתאמה. הצופן מקבל מפתח הצפנה וכן "tweak" המשרת בערך כמו וקטור אתחול או Nonce. הנוסחה היא:
XTS-AES.
תקן IEEE P1619 אימץ את מצב ההפעלה XTS-AES (לפי שיטת XEX - כלומר "XOR/ENCRYPTION/XOR" כשההצפנה היא עם AES), מצב הפעלה זה פותח במיוחד להצפנת סקטורים גדולים במדייה דיגיטלית. השיטה נקראת teawkable במובן שהיא משתמשת בווקטור אתחול שנקרא tweak בגודל 128 סיביות (16 בתים) כאן מסומן ב-formula_7. ה-tweak משתנה בכל סקטור והוא יכול להיות מספר רץ של הסקטור. בשיטה זו כל בלוק מוצפן פעמיים. המפתח מחולק לשני מפתחות formula_8 כל אחד בגודל הדרוש לצופן הבלוקים, תחילה מצפינים את וקטור האתחול עם המפתח הראשון ולאחר מכן מפעילים פונקציה פסאודו-אקראית פשוטה ומצפינים את התוצאה מחוברת עם בלוק הטקסט הקריא באמצעות המפתח השני.
הבלוק נקרא כאן formula_9 ו-formula_10 הוא מונה המייצג את מספרו הסידורי של הבלוק בתוך הסקטור. הנוסחה להצפנת בלוק אחד שנקראת כאן formula_11 כמוצג בתרשים היא:
הפעלת הצופן בשורה הראשונה מתבצעת רק פעם אחת כיוון ש-formula_7 אינו עולה על בלוק אחד. בפענוח מחליפים בשורה השנייה את הקריאה לפונקציית ההצפנה בפונקציית הפענוח formula_15.
ההכפלה ב-formula_16 היא כפל של הבלוק המוצפן, אותו רואים כפולינום מעל השדה הבינארי המורחב formula_17 בחזקות formula_10 של הפולינום formula_19 או formula_20 בייצוג הקסדצימלי, מודולו formula_6. הכפל האמור מסומן ב-formula_22. לצורך הצמצום המודולרי משתמשים בפולינום הפרימיטיבי formula_23 כדי שהתוצאה תישאר אלמנט בשדה. מבחינה פרקטית פעולת הכפל בשדה formula_17 יכולה להתבצע על ידי רקורסיה של formula_10 הזזות (shift) השקולות לכפל ב-formula_19 וצמצום מודולרי באמצעות פעולת XOR מותנת (כאשר הסיבית הגבוהה היא '1') עם הערך formula_27 או בייצוג הקסדצימלי formula_28. אפשר לראותה כפעולה חיסור במודולוס הדרושה כאשר מתרחשת גלישה (להסבר נוסף ראה OMAC), אפשר להכין את הערכים הללו מראש או להשתמש בטבלאות חיפוש, בהתאם לאופי היישום והחומרה, אך צריך להביא בחשבון התקפת ערוץ צדדי שמודדת את זמני הביצוע השונים. להלן דרך בטוחה לביצוע פעולת הכפל בשדה formula_17 בחלוקה ל-16 בתים המסומנים formula_30:
הכפל מתבצע בית אחר בית, הכפל ב-2 אינו אלא הזזה לשמאל והחילוק ב-128 הוא הזזה לימין 8 פוזיציות. הפעולה formula_31 מעבירה את סיבית הגלישה לבית הבא. ואין צורך לבצע מודולו 128 אפשר לעשות formula_32 במקום.
להצפנת סקטור שלם במשתמשים בטכניקה שנקראת גנבת טקסט-מוצפן. תחילה מחלקים אותו ל-formula_33 בלוקים בגודל המתאים לצופן הבלוקים. כלומר אם הסקטור הוא formula_34 אז formula_35. כאשר formula_36 הוא השלם הגדול ביותר כך שמתקיים formula_37. יש לשים לב ש-formula_36 הבלוקים הראשונים מלאים ואילו הבלוק formula_39 חלקי או ריק לגמרי (מכיל רק אפסים). ההצפנה של הסקטור מתחלקת לשני מקרים כדלהלן, אם הבלוק האחרון ריק, כלומר formula_40 ההצפנה של כל הסקטור מתבצעת ישירות כך; עבור כל בלוק formula_41 כאשר formula_42 מחשבים את formula_43 והבלוק המוצפן האחרון formula_44 יהיה ריק. אם בלוק הטקסט הקריא האחרון אינו ריק דהיינו formula_45 אזי מבצעים 'שיכול' בין שני הבלוקים האחרונים כדלהלן; תחילה מחשבים את formula_46, הבלוק formula_44 יהיה formula_48 הסיביות הראשונות של formula_49 ואז משרשרים את formula_50 הסיביות הנותרות של formula_49 לבלוק הטקסט הקריא האחרון formula_39 ומתקבל בלוק חדש formula_53 אותו מצפינים כך formula_54 והתוצאה האחרונה תהיה הבלוק formula_55. שים לב שהבלוק formula_44 עשוי להיות חלקי. לכן הטקסט המוצפן נשאר באורך זהה לטקסט המקורי.
ביטחון.
הוכח על ידי רוגאווי שביטחון השיטה הוא בסיבוכיות formula_57 כלומר הביטוי משקף את היתרון שבידי התוקף בהבחנה בין הטקסט המוצפן לבין מחרוזת אקראית כלשהי, כאשר formula_58 הוא מספר השאילתות האקראיות לאורקל (בהקשר מעשי - מספר הבלוקים שהוא יכול להצפין) ו-formula_59 מייצג את "היתרון" שלו או אפשר לומר טווח השגיאה. בגלל התקפת יום הולדת קיים חסם עליון שהוא formula_60 שמחייב שלאחר גבול זה התנגשויות חייבות להופיע, לכן כאשר formula_58 מתקרב לערך זה יש סבירות משמעותית ש"התקפת הבחנה" תצליח. כלומר שיימצא זוג המקיים formula_62 עבור שני אינדקסים שונים formula_63 כאשר formula_9 הוא הטקסט הקריא ו-formula_65 הוא ה-tweak. במקרה זה הטקסטים המוצפנים formula_66 המתאימים יהיו זהים אחרי חיבור עם ה-tweak של כל אחד מהם בהתאמה. מזה נובע ש-formula_67. כלומר התרחשה התנגשות שמאפשרת לתקוף להבחין בין ההצפנה בשיטה זו לבין טקסט רנדומלי לחלוטין. התקפת הבחנה אינה תאורטית בלבד, באמצעותה התוקף יכול לבצע שינויים בסיביות ספציפיות בטקסט המקורי שמתאים לטקסט המוצפן שהוא תוקף וזאת מבלי לפענחו, בדרך הבאה:
עבור formula_68 כלשהו הוא מחשב את formula_69 במיקום formula_7 ומחליף את הטקסט המוצפן formula_71 באופן הבא: formula_72 והטקסט המוצפן החדש יהיה formula_73, במילים אחרות התוקף הצליח לשנות סיביות מסוימות של הבלוק formula_41 מבלי שהמותקף יבחין בכך.
התקפות ערוץ צדדי.