אוגר ה-LFSR מורכב מ-16 מצבים formula_151 כל אחד מכיל 32 סיביות. מכונת המצבים FSM מכילה שלושה אוגרי 32 סיביות הנקראים formula_152. פונקציות ההחלפה formula_153 ו-formula_154 משמשות לעדכון האוגרים formula_155 ו-formula_156 בהתאמה (כמתואר בתרשים משמאל). תיבות ההחלפה ממפות קלט באורך 32 סיביות לפלט באורך 32 סיביות. הקלט מחולק לארבעה בתים formula_157 כאשר formula_28 הוא הבית הכי פחות משמעותי (LSB).
פונקציות החלפה.
את פונקציית ההחלפה formula_153 מכינים על ידי הטבלה formula_105 אותה משאילים מצופן ריינדל (בהמשך). הקלט מחולק לארבעה בתים אותם מפרשים כמקדמים של אלמנט בשדה formula_161 המוגדר על ידי הפולינום formula_95. בנוסף להחלפה לפי ה-S-box של ריינדל מתבצעת הפונקציה MixColumn של ריינדל. שתי הפעולות, ההחלפה וערבוב העמודות מבוצעות במשולב כדלקמן:
את פונקציית ההחלפה formula_154 מכינים על ידי הטבלה formula_168 המובאת להלן. ההחלפה מתבצעת כך
פונקציית ההיזון של ה-LFSR וכן פונקציית העדכון של ה-FSM משתמשות בפונקציות formula_173 ו-formula_174 המוגדרות כך:
תיבות החלפה S-box.
הטבלה formula_105 מכילה 256 ערכים אפשריים באורך 8 סיביות (בתים) בבסיס הקסדצימלי מתוך תיבות ההחלפה של צופן ריינדל, כך שמתקיים formula_184, התא המצוי בשורה formula_185 ועמודה formula_186 מכיל את הערך formula_187. לדוגמה formula_188:
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 63 7C 77 7B F2 6B 6F C5 30 01 67 2B FE D7 AB 76
1 CA 82 C9 7D FA 59 47 F0 AD D4 A2 AF 9C A4 72 C0
2 B7 FD 93 26 36 3F F7 CC 34 A5 E5 F1 71 D8 31 15
3 04 C7 23 C3 18 96 05 9A 07 12 80 E2 EB 27 B2 75
4 09 83 2C 1A 1B 6E 5A A0 52 3B D6 B3 29 E3 2F 84
5 53 D1 00 ED 20 FC B1 5B 6A CB BE 39 4A 4C 58 CF
6 D0 EF AA FB 43 4D 33 85 45 F9 02 7F 50 3C 9F A8
7 51 A3 40 8F 92 9D 38 F5 BC B6 DA 21 10 FF F3 D2
8 CD 0C 13 EC 5F 97 44 17 C4 A7 7E 3D 64 5D 19 73
9 60 81 4F DC 22 2A 90 88 46 EE B8 14 DE 5E 0B DB
A E0 32 3A 0A 49 06 24 5C C2 D3 AC 62 91 95 E4 79
B E7 C8 37 6D 8D D5 4E A9 6C 56 F4 EA 65 7A AE 08
C BA 78 25 2E 1C A6 B4 C6 E8 DD 74 1F 4B BD 8B 8A
D 70 3E B5 66 48 03 F6 0E 61 35 57 B9 86 C1 1D 9E
E E1 F8 98 11 69 D9 8E 94 9B 1E 87 E9 CE 55 28 DF
F 8C A1 89 0D BF E6 42 68 41 99 2D 0F B0 54 BB 16
הטבלה formula_189 מכילה 256 ערכים אפשריים באורך 8 סיביות (בתים) בבסיס הקסדצימלי אותה מכינים על ידי פולינום דיקסון formula_190 כך שעבור קלט formula_107 באורך 8 סיביות המייצג אלמנט בשדה formula_161 המוגדר על ידי הפולינום formula_193 כל כניסה בטבלה מתאימה ל-formula_194:
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 25 24 73 67 D7 AE 5C 30 A4 EE 6E CB 7D B5 82 DB
1 E4 8E 48 49 4F 5D 6A 78 70 88 E8 5F 5E 84 65 E2
2 D8 E9 CC ED 40 2F 11 28 57 D2 AC E3 4A 15 1B B9
3 B2 80 85 A6 2E 02 47 29 07 4B 0E C1 51 AA 89 D4
4 CA 01 46 B3 EF DD 44 7B C2 7F BE C3 9F 20 4C 64
5 83 A2 68 42 13 B4 41 CD BA C6 BB 6D 4D 71 21 F4
6 8D B0 E5 93 FE 8F E6 CF 43 45 31 22 37 36 96 FA
7 BC 0F 08 52 1D 55 1A C5 4E 23 69 7A 92 FF 5B 5A
8 EB 9A 1C A9 D1 7E 0D FC 50 8A B6 62 F5 0A F8 DC
9 03 3C 0C 39 F1 B8 F3 3D F2 D5 97 66 81 32 A0 00
A 06 CE F6 EA B7 17 F7 8C 79 D6 A7 BF 8B 3F 1F 53
B 63 75 35 2C 60 FD 27 D3 94 A5 7C A1 05 58 2D BD
C D9 C7 AF 6B 54 0B E0 38 04 C8 9D E7 14 B1 87 9C
D DF 6F F9 DA 2A C4 59 16 74 91 AB 26 61 76 34 2B
E AD 99 FB 72 EC 33 12 DE 98 3B C0 9B 3E 18 10 3A
F 56 E1 77 C9 1E 9E 95 A3 90 19 A8 6C 09 D0 F0 86
מצב אתחול.
באתחול הצופן בכל פעימה ה-LFSR מקודם כך שהערך המצוי בכל כניסה מועתק לכניסה הבאה משמאל לימין (כלומר formula_195 וכן הלאה), הכניסה האחרונה formula_196 מתעדכנת על ידי פונקציית ההיזון לפי הנוסחה הבאה. מתייחסים ל-formula_197 כאל ארבעה בתים formula_198 וכן לגבי הכניסה formula_199:
הערך formula_201 הוא פלט מכונת המצבים המוגדרת להלן.
מצב הצפנה.
במצב הצפנה ה-LFSR מקודם באותו אופן, כל הערכים זזים ימינה והכניסה האחרונה מתעדכנת לפי:
בשלב זה לא כוללים את פלט מכונת המצבים בפונקציית ההזנה.
מכונת המצבים.
מכונת המצבים FSM מקבלת מה-LFSR שתי מילים מהכניסות formula_196 ו-formula_204 ומייצרת מילה אחת formula_201 כדלהלן:
עדכון מכונת המצבים מתבצע כך:
הכנת מפתח.
בשלב הכנת הצופן טוענים את המפתח הסודי באורך 128 סיביות המחולק לארבע מילים formula_109 ואת וקטור האתחול formula_212 לתוך ה-LFSR כדלהלן:
כאן formula_42 מייצג מילה המכילה 32 אחדים (formula_116) כמו כן בשלב האתחול תכולת האוגרים של ה-FSM מאופסת. ואז מריצים את הצופן 32 פעימות ללא שימוש בפלט, אלא במקום זאת הפלט formula_201 מחובר לפונקציית ההיזון בחזרה. לאחר מכן מריצים את הצופן פעימה נוספת בה לא משתמשים בפלט כלל ולאחר מכן הצופן מוכן לשימוש.
הצפנה.
בכל פעימת הצפנה המהלכים הבאים מתבצעים:
חוזרים שוב על התהליך עד להשלמת כל המסר.
ביטחון.
בעקרון ביטחון גרסה זו מבוסס על SNOW 2.0 וקיימת קריפטואנליזה של שתי הגרסאות. מחקרים מראים שקיימת חולשה שנקראת "מפתחות קשורים" (related keys) בשניהם וכן התגלו חולשות באקראיות הצופן. ב-2010 פורסמה התקפת ערוץ צדדי נגד SNOW 3G שמראה שניתן לפרוץ את הצופן בזמן מאוד קצר (מספר שניות) אם לתוקף יש אפשרות להשיג מידע תיזמון הקשור במעבר מתיבת החלפה אחת לשנייה. הפתרון שהוצע במקרה כזה שימוש בטכניקה שנקראת BitSlice בדומה לצופן סרפנט.
היבטי יישום.
צופן SNOW פותח תוך מתן דגש על יישום מהיר בתוכנה. הפעולות בצופן נפוצות בכל מעבד מצוי; XOR, חיבור שלמים, הזזה ואחזור טבלאות (קריאות זיכרון). אף על פי ש-LFSR הוא רכיב חומרה אפשר ליישמו ביעילות בתוכנה, השדה formula_3 הוא הרחבה של formula_30 עם formula_224 שורש ממעלה 4 של הפולינום
לכן אפשר לצמצם את המעלה של formula_9 כי
בסיכומו של דבר הכפל ב-formula_9 וב-formula_60 בלולאת ההזנה ניתנים למימוש בתוכנה בפעולת הזזה (shift) ברמה של בתים. לסיכום זה נראה כך:
המקדמים formula_232 הם בתי הקלט formula_29. אפשר לבצע את הכפל והחילוק בשיטה הישירה כמתואר לעיל או באמצעות טבלאות חיפוש מוכנות מראש כמו בפסאודו קוד הבא:
result=(w«8) ^ MUL_A[w &amp; 0xff];
result=(w»8) ^ MUL_AINVERSE[w &amp; 0xff];
יישום פעולת ההחלפה של צופן SNOW בתוכנה ניתן להאצה בטכניקה דומה לזו שאומצה בצופן ריינדל. הכפל במטריצות המתואר לעיל ניתן לפיצול כצירוף ליניארי של העמודות תוך שימוש בארבע תיבות המכילות 256 מילים כל אחת. כל טבלה מכילה את כל התוצאות האפשריות של הכפלה בעמודה אחת בהתאם. לסיכום בפסאודו קוד הבא יוצאים מהנחה שקיימות ארבע טבלאות formula_234 כאמור:
r=T0[w &amp; 0xff] ^ T1[(w » 8) &amp; 0xff] ^ T2[(w » 16) &amp; 0xff] ^ T3[(w » 24) &amp; 0xff];
כמו כן אפשר ליישם את ה-LFSR בשני אופנים. האחד קל לקריאה והוא מיושם באמצעות מערכים ושימוש בטכניקת חלון, קרי במקום לבצע העתקה בפועל של ערכים מנהלים מעקב באמצעות מצביעים. השני הוא הארד קודינג של מצבי ה-LFSR. היתרון בשיטה האחרונה שבכל קריאה לפרוצדורה להפקת זרם המפתח נוצרות בבת אחת 512 סיביות המקבילות ל-16 פעימות שעון בשיטה הרגילה. בניסוי שערכו המפתחים על פנטיום 4 של אינטל 1.8GHz עם 512 מגה, בגרסה 2 הממוטבת (הארד קודינג) נדרשו 18 מחזורי שעון למילה אחת. שהוא קצב מהיר כמעט פי שניים.
קוד לדוגמה של צופן SNOW 3G.
הקוד הבא הוא קוד שלם הכתוב בשפת C# לפי היישום הבסיסי לא ממוטב שהומלץ על ידי התקן לצורך ייחוס והשוואה. הוא משתמש במערך LFSR באורך 16 כניסות בגודל 32 סיביות ומערך FSM עם שלוש כניסות באורך 32 סיביות וכן שתי טבלאות SR ו-SQ המכילות בכל אחת 256 ערכים קבועים:
uint[] LFSR = new uint[16];
uint[] FSM = new uint[3];
byte[] SR = new byte[256] {
0x63,0x7C,0x77,0x7B,0xF2,0x6B,0x6F,0xC5,0x30,0x01,0x67,0x2B,0xFE,0xD7,0xAB,0x76,
0xCA,0x82,0xC9,0x7D,0xFA,0x59,0x47,0xF0,0xAD,0xD4,0xA2,0xAF,0x9C,0xA4,0x72,0xC0,
0xB7,0xFD,0x93,0x26,0x36,0x3F,0xF7,0xCC,0x34,0xA5,0xE5,0xF1,0x71,0xD8,0x31,0x15,
0x04,0xC7,0x23,0xC3,0x18,0x96,0x05,0x9A,0x07,0x12,0x80,0xE2,0xEB,0x27,0xB2,0x75,
0x09,0x83,0x2C,0x1A,0x1B,0x6E,0x5A,0xA0,0x52,0x3B,0xD6,0xB3,0x29,0xE3,0x2F,0x84,
0x53,0xD1,0x00,0xED,0x20,0xFC,0xB1,0x5B,0x6A,0xCB,0xBE,0x39,0x4A,0x4C,0x58,0xCF,
0xD0,0xEF,0xAA,0xFB,0x43,0x4D,0x33,0x85,0x45,0xF9,0x02,0x7F,0x50,0x3C,0x9F,0xA8,
0x51,0xA3,0x40,0x8F,0x92,0x9D,0x38,0xF5,0xBC,0xB6,0xDA,0x21,0x10,0xFF,0xF3,0xD2,
0xCD,0x0C,0x13,0xEC,0x5F,0x97,0x44,0x17,0xC4,0xA7,0x7E,0x3D,0x64,0x5D,0x19,0x73,
0x60,0x81,0x4F,0xDC,0x22,0x2A,0x90,0x88,0x46,0xEE,0xB8,0x14,0xDE,0x5E,0x0B,0xDB,
0xE0,0x32,0x3A,0x0A,0x49,0x06,0x24,0x5C,0xC2,0xD3,0xAC,0x62,0x91,0x95,0xE4,0x79,
0xE7,0xC8,0x37,0x6D,0x8D,0xD5,0x4E,0xA9,0x6C,0x56,0xF4,0xEA,0x65,0x7A,0xAE,0x08,
0xBA,0x78,0x25,0x2E,0x1C,0xA6,0xB4,0xC6,0xE8,0xDD,0x74,0x1F,0x4B,0xBD,0x8B,0x8A,
0x70,0x3E,0xB5,0x66,0x48,0x03,0xF6,0x0E,0x61,0x35,0x57,0xB9,0x86,0xC1,0x1D,0x9E,
0xE1,0xF8,0x98,0x11,0x69,0xD9,0x8E,0x94,0x9B,0x1E,0x87,0xE9,0xCE,0x55,0x28,0xDF,