stanford-oval/wikipedia huggingface dataset:
אוריינטד

| --- | --- |

כרזת הסרט
 בימוי:  ג'ייק וויצנפלד 
 הופק בידי:  יואב בירנפלד ג'ייק ויזנפלד
 עריכה:  נילי פלר 
 שחקנים ראשיים:  חאדר אבו סייף פאדי דעים נעים ג'ירייס
 מדינה:  ישראל, הממלכה המאוחדת 
 חברה מפיצה:  נטפליקס 
 שיטת הפצה:  וידאו על פי דרישה 
 הקרנת בכורה:  2015 
 משך הקרנה:  86 דק' 
 שפת הסרט:  ערבית עברית
 סוגה:  סרט תיעודי
 www.orientedfilm.com
 דף הסרט ב־IMDb
 
אוריינטד (באנגלית: Oriented) הוא סרט תיעודי ישראלי בבימויו של ג'ייק וויצנפלד. הסרט עוקב אחר חייהם של שלושה פלסטינים הומוסקסואליים המתגוררים בתל אביב-יפו במשך 15 חודשים. זהו סרטו התיעודי הראשון של ויצנפלד. הסרט הוצג לראשונה בפסטיבל הסרטים Sheffield Doc / Fest שבשפילד ביוני 2015.‏
משתתפים

חאדר אבו סייף (בתפקיד עצמו)
פאדי דעים (בתפקיד עצמו)
נעים ג'ירייס (בתפקיד עצמו)
תגובות

בביקורת עבור המגזין Moment, כתבה עמרה מקלפלין שהסרט הוא "מהפכה בין-תרבותית החוצה גאוגרפיה, לאום, דת, נטייה מינית והגירה".
הערות שוליים

↑  Crummy, Colin. "meet the young gay arabs causing a commotion in tel aviv". i-D. נבדק ב-30 באוגוסט 2015. {{cite web}}:  (עזרה)
↑  McLaughlin, Amara. "'Oriented' Examines What it Means to be Gay and Palestinian in Israel". Moment. נבדק ב-31 באוגוסט 2015. {{cite web}}:  (עזרה)
Salsa20

Salsa20 הוא צופן זרם שפותח ב-2005 על ידי דניאל ברנשטיין באוניברסיטת אילינוי בשיקגו והוצע עבור פרויקט eSTREAM האירופאי. ב-2008 נבחר על ידי eSTREAM בסיבוב השלישי (Phase 3), כאחד מארבעת האלגוריתמים המובילים במסגרת פרופיל 1 בקטגוריית צופן זרם בתוכנה. הגרעין של Salsa20 הוא פונקציה פסאודו-אקראית הפועלת על קלט ופלט בגודל 64 בתים ומיושמת כצופן זרם במצב מונה. הפונקציה מקבלת מפתח הצפנה סודי באורך 128 או 256 סיביות, ערך ייחודי חד-פעמי באורך 64 סיביות הנקרא Nonce ומשמש כוקטור אתחול, מונה המייצג את מספר הבלוק באורך 64 סיביות וקבועים נוספים. על ידי גיבוב הערכים הללו כשהם משולבים יחד, מייצרת פלט פסאודו-אקראי באורך 64 בתים, אותו מחברים בחיבור בינארי עם בלוק טקסט קריא לקבלת טקסט מוצפן. אפשר להצפין עם מפתח אחד עד  2^{70} בתים של מידע. המבנה הזה מעניק לצופן יתרון ביכולת לשחזר כל בלוק ספציפי מהטקסט המוצפן בזמן קבוע. מימוש ממוטב של צופן Salsa יכול להגיע ליעילות בסדר גודל של כמעט 14 מחזורי שעון לבית או כ-643 מגה לשנייה (לעומת RC4 שמגיע לסדר גודל של 200 מגה לשנייה בקירוב). נכון לשנת 2014 נחשב Salsa לצופן בטוח ולא ידוע על התקפה יעילה נגדו.
תיאור האלגוריתם

Salsa20 הוא צופן זרם סינכרוני (שבו המפתח מופק ללא תלות בטקסט הקריא או המוצפן), הפועל על יחידת מידע בגודל 64 בתים. השלד העיקרי מורכב מפונקציית גיבוב הכוללת שילוב של שלוש פעולות אריתמטיות פשוטות; חיבור מודולו  2^{32} המבוצע במילים בגודל 32 סיביות, חיבור מודולו 2 (המסומן XOR) והזזה מעגלית (rotation) על מילים (הזזה של כל סיביות המילה שמאלה או ימינה במספר פוזיציות לפי פרמטר, כאשר הסיביות הקיצוניות שנפלטות מצד אחד מוחזרות מהצד השני). ומפיקה פלט בגודל 64 בתים פסאודו-אקראיים שמרכיבים את 'המצב הפנימי' של הצופן. פונקציית הגיבוב הופכת לפונקציית הצפנה בשיטת ורנם, שבה תוצאת הגיבוב הופכת למפתח הצפנה מורחב בגודל 16 מילים. בלוק הטקסט הקריא בגודל 16 מילים מוצפן מילה אחר מילה, בדרך זו:  c_{i}=m_{i}\oplus k_{i}. הפענוח זהה, כיוון ש-XOR הופכי של עצמו. סדר הפעולות בתוך הליבה של Salsa20 הוא "או-מוציא של חיבור לאחר הזזה מעגלית" בקיצור ARX (ראשי תיבות של שלוש הפעולות לפי הסדר האמור). שילוב זה הוכח כבטוח כנגד התקפה דיפרנציאלית (ראה להלן) וכן מבטיח עמידות כנגד התקפת תזמון (timing attack).
תיאור האלגוריתם > המצב הפנימי

את המצב ההתחלתי (initial state) של פונקציית הגיבוב של Salsa מאתחלים בערכים הבאים:
8 מילות מפתח. מפתח ההצפנה המסופק על ידי המשתמש בסך הכול 256 סיביות, מחולק לשמונה מילים של 32 סיביות. במקרה של מפתח 128 סיביות מכפילים פעמיים לקבלת 8 מילים.
2 מילות מונה. קידוד של מספר שלם בגודל 64 סיביות המזהה את מספר הבלוק הנוכחי, מתחיל באפס ומקודם באחד לאחר כל הצפנה של בלוק, כך שבכל הצפנה מתקבל מפתח אחר. המונה מאפשר לשחזר את זרם המפתח ששימש להצפנת בלוק נתון ובכך לפענחו ללא תלות בבלוקים האחרים.
2 מילות Nonce. ערך ייחודי בגודל 64 סיביות המשמש פעם אחת בלבד עבור מסר נתון (המכיל בלוק אחד או יותר) ואינו בהכרח סודי. בדרך כלל בוחרים מספר פסאודו-אקראי או מספר רץ. בתקן eSTREAM הוא מכונה וקטור אתחול (iv). ערך זה מבטיח שלא יהיו שני מסרים שונים שיוצפנו באותו מפתח. ייחודיותו של ערך זה באחריות המשתמש.
4 מילים קבועות. שהם (16 בתים) של קידוד המחרוזת "expand 32-byte k" (כולל רווחים) במקרה של מפתח 256 סיביות, או המחרוזת "expand 16-byte k" במקרה של מפתח 128 סיביות.
את הערכים המתוארים פורסים לתוך מצב הראשוני ב-64 בתים לפי הסדר הבא. אם המפתח הוא בגודל 256 סיביות (לפי ההמלצה של המַפַתֵּח דניאל ברנשטיין), תחילה ממירים את מחרוזות הטקסט הקבועות לארבע מילים לפי סדר בתים קטן, סך הכול ארבע אותיות במילה. למשל קוד האסקי של "e" הוא  101 ובייצוג הקסדצימלי  {\mbox{0x65}}, של "x" הוא  {\mbox{0x78}} ושל "p"  {\mbox{0x70}} וכן הלאה. אחרי המרה של המחרוזת למילים בייצוג הקסדצימלי מתקבל:
וקטור האתחול מיוצג על ידי  v ומונה הבלוקים מיוצג על ידי  i. אם המפתח בגודל 256 סיביות מחלקים אותו לשני מקטעים בני 16 בתים כל אחד  k_{0},k_{1} ומשרשרים את כל החלקים יחד במבנה הבא:
עבור מפתח 128 סיביות קיים רק מפתח  k אחד בגודל 16 בתים וערכי המחרוזת "expand 16-byte k" בחלוקה למילים הם:
והמבנה המתקבל הוא:
תיאור האלגוריתם > פונקציית QuarterRound

הפונקציה השוכנת בליבו של צופן סלסה  z_{0},...,z_{3}={\mbox{QuarterRound}}(y_{0},...,y_{3}) (ראו תרשים), היא פונקציה הפיכה המקבלת 4 מילים ומפיקה פלט של 4 מילים כדלהלן:
הסימן  \boxplus  מייצג חיבור מודולו  2^{32}, הסימן  \lll  מייצג הזזה מעגלית של משתנה באורך 32 סיביות שמאלה במספר פוזיציות לפי הערך שלימינו והסימן  \oplus  מייצג XOR. לדוגמה בייצוג הקסדצימלי בחישוב  {\mbox{QuarterRound}}(1,0,0,0) מתקבל: 
 (z_{0}={\text{0x8008145}},z_{1}={\mbox{0x80}},z_{2}={\text{0x10200}},z_{3}={\text{0x20500000}})
תיאור האלגוריתם > פונקציית RowRound

הפונקציה RowRound מפעילה את הפונקציה QuarterRound על 16 מילים  y_{0},...,y_{15} באופן הבא:
תיאור האלגוריתם > פונקציית ColumnRound

{\begin{pmatrix}x_{0}&x_{1}&x_{2}&x_{3}\\x_{4}&x_{5}&x_{6}&x_{7}\\x_{8}&x_{9}&x_{10}&x_{11}\\x_{12}&x_{13}&x_{14}&x_{15}\end{pmatrix}}
אם מדמיינים את 16 הבתים לעיל, כמטריצה ריבועית 4x4 מילים (ראו תרשים), הפונקציה ColumnRound דומה לקודמת מלבד זאת שהיא מפעילה את QurterRound על עמודות המטריצה במקום שורות, כדלהלן:
תיאור האלגוריתם > פונקציית DoubleRound

שתי הפונקציות המתוארות כשהן משולבות יחד נקראות DoubleRound דהיינו כל מילה מעובדת פעמיים, פעם אחת כחלק משורות במטריצה ופעם אחת כעמודות, בניסוח פורמלי:  {\mbox{DoubleRound}}(x_{0},...,x_{15})={\mbox{RowRound}}({\mbox{ColumnRound}}(x_{0},...,x_{15})).
כמו כן, לצורך הפעולות האריתמטיות, המעבר ממערך של ארבעה בתים למילה אחת הוא לפי סדר בתים קטן שאומר שהבית הראשון מייצג את הספרות הפחות משמעותיות של המילה, לכן במחשב עם סדר בתים גדול, יש צורך בפונקציית המרה כדי להמיר מבתים למילים ובחזרה לפי הנוסחה:  b_{0}+2^{8}b_{1}+2^{16}b_{2}+2^{24}b_{3}. לדוגמה אם נתון מערך הבתים:  \{b_{0}=86,b_{1}=75,b_{2}=30,b_{3}=9\} בהמרה למילה בת 32 סיביות לפי סדר בתים קטן, יתקבל הערך  152,980,310 (לפי סדר בתים גדול מתקבל  1,447,763,456).
אם מסכמים את כל הפעולות יחד, מימוש הפונקציה DoubleRound ייראה כך:
| ColumnRound | RowRound |
| --- | --- |
  x_{4}=x_{4}\oplus {\mbox{ROTL}}_{7}(x_{0}\boxplus x_{12})  x_{8}=x_{8}\oplus {\mbox{ROTL}}_{9}(x_{4}\boxplus x_{0})  x_{12}=x_{12}\oplus {\mbox{ROTL}}_{13}(x_{8}\boxplus x_{4})  x_{0}=x_{0}\oplus {\mbox{ROTL}}_{18}(x_{12}\boxplus x_{8})  x_{9}=x_{9}\oplus {\mbox{ROTL}}_{7}(x_{5}\boxplus x_{1})  x_{13}=x_{13}\oplus {\mbox{ROTL}}_{9}(x_{9}\boxplus x_{5})  x_{1}=x_{1}\oplus {\mbox{ROTL}}_{13}(x_{13}\boxplus x_{9})  x_{5}=x_{5}\oplus {\mbox{ROTL}}_{18}(x_{1}\boxplus x_{13})  x_{14}=x_{14}\oplus {\mbox{ROTL}}_{7}(x_{10}\boxplus x_{6})  x_{2}=x_{2}\oplus {\mbox{ROTL}}_{9}(x_{14}\boxplus x_{10})  x_{6}=x_{6}\oplus {\mbox{ROTL}}_{13}(x_{2}\boxplus x_{14})  x_{10}=x_{10}\oplus {\mbox{ROTL}}_{18}(x_{6}\boxplus x_{2})  x_{3}=x_{3}\oplus {\mbox{ROTL}}_{7}(x_{15}\boxplus x_{11})  x_{7}=x_{7}\oplus {\mbox{ROTL}}_{9}(x_{3}\boxplus x_{15})  x_{11}=x_{11}\oplus {\mbox{ROTL}}_{13}(x_{7}\boxplus x_{3})  x_{15}=x_{15}\oplus {\mbox{ROTL}}_{18}(x_{11}\boxplus x_{7}):   x_{1}=x_{1}\oplus {\mbox{ROTL}}_{7}(x_{0}\boxplus x_{3})  x_{2}=x_{2}\oplus {\mbox{ROTL}}_{9}(x_{1}\boxplus x_{0})  x_{3}=x_{3}\oplus {\mbox{ROTL}}_{13}(x_{2}\boxplus x_{1})  x_{0}=x_{0}\oplus {\mbox{ROTL}}_{18}(x_{3}\boxplus x_{2})  x_{6}=x_{6}\oplus {\mbox{ROTL}}_{7}(x_{5}\boxplus x_{4})  x_{7}=x_{7}\oplus {\mbox{ROTL}}_{9}(x_{6}\boxplus x_{5})  x_{4}=x_{4}\oplus {\mbox{ROTL}}_{13}(x_{7}\boxplus x_{6})  x_{5}=x_{5}\oplus {\mbox{ROTL}}_{18}(x_{4}\boxplus x_{7})  x_{11}=x_{11}\oplus {\mbox{ROTL}}_{7}(x_{10}\boxplus x_{9})  x_{8}=x_{8}\oplus {\mbox{ROTL}}_{9}(x_{11}\boxplus x_{10})  x_{9}=x_{9}\oplus {\mbox{ROTL}}_{13}(x_{8}\boxplus x_{11})  x_{10}=x_{10}\oplus {\mbox{ROTL}}_{18}(x_{9}\boxplus x_{8})  x_{12}=x_{12}\oplus {\mbox{ROTL}}_{7}(x_{15}\boxplus x_{14})  x_{13}=x_{13}\oplus {\mbox{ROTL}}_{9}(x_{12}\boxplus x_{15})  x_{14}=x_{14}\oplus {\mbox{ROTL}}_{13}(x_{13}\boxplus x_{12})  x_{15}=x_{15}\oplus {\mbox{ROTL}}_{18}(x_{14}\boxplus x_{13})
הפונקציה  {\mbox{ROTL}} היא פונקציית הזזה מעגלית לשמאל והמספר התחתי מציין את מספר הפוזיציות שיש להזיז. הזזה מעגלית ניתנת ליישום בתוכנה בקריאה לפונקציית ספרייה או באמצעות הזזות Shift ו-OR המובנות ברוב שפות התיכנות, למשל בשפת C הביטוי: (value << count) | (value >> (32 - count)) מבצע הזזה מעגלית של value במספר פוזיציות לפי count.
תיאור האלגוריתם > פונקציית הגיבוב

פונקציית הגיבוב של Salsa משלבת את הפונקציות האמורות על קלט בגודל 64 בתים, כדי להפיק פלט של 64 בתים פסאודו-אקראיים. בניסוח פורמלי אם נתון המצב הראשוני  x המתואר לעיל, הנוסחה היא:
כלומר מחלקים את הקלט  x ל-16 מילים  x_{0} עד  x_{15}, אותם מחשבים באמצעות פונקציית DoubleRound עשר פעמים. ופלט הפונקציה הוא תוצאת החיבור מודולו  2^{32} עם מילות המצב הראשוני  x_{0} עד  x_{15}. המציין מעל הפונקציה DoubleRound מייצג את מספר החזרות. כיוון שהפונקציה הפנימית מבוצעת פעמיים (בשורות ובעמודות) מסומן הצופן בקיצור Salsa20, כלומר ביצוע  {\mbox{DoubleRound}}^{10}, נחשב כ-20 סבבים. כאשר מעוניינים בפונקציית הצפנה מהירה יותר על חשבון ביטחון אפשר להפחית במספר הסבבים. האופציות המומלצות הן 8 או 12 סבבים.
תיאור האלגוריתם > הצפנה ופענוח

עם פלט פונקציית הגיבוב Slasa20 המתוארת, אפשר להצפין מסר  m באורך מקסימלי של  2^{70} בתים כשהוא מחולק לבלוקים בגודל 64 בתים, עם וקטור האתחול  v, המונה  i  כאשר  0\leq i\leq 2^{64}-1 והמפתח  k באופן הבא:
לאחר הצפנת  2^{70} בתים יש לאתחל את הצופן עם וקטור אתחול חדש ולהתחיל את המונה מאפס או להחליף מפתח. כאמור  v לא חייב להיות סודי אך חייב להיות ייחודי. מעשית יכול להיות מונה כלשהו. לפענוח פועלים באופן זהה לחלוטין:
למעשה הנוסחה המתוארת מתאימה רק למסר המתחלק ב-64 בתים. אם המסר קטן יותר, או שהבלוק האחרון אינו בגודל 64 בתים, חותכים את תוצאת פונקציית הגיבוב כאורך המסר ומתעלמים מהיתר.
ביטחון ויעילות

ב-2005 דווח על סוג של ההתקפה דיפרנציאלית נגד גרסה מצומצמת של סלסה בחמשה סבבים, מסומן בקיצור Salsa20/5 בסיבוכיות זמן של  2^{165} בקירוב. מפתח ההתקפה זכה באלף דולר מאת דניאל ברנשטיין שהבטיח את הפרס לכל מי שיצליח להציג "קריפטואנליזה הכי מעניינת של סלסה". ב-2006 הצליחו מספר חוקרים לפתח התקפה כנגד Salsa20/6 בסיבוכיות זמן של  2^{177} וכן התקפת Related key על Salsa20/7 בזמן של  2^{217}. ב-2007 פותחה התקפה על Salsa20/8 בזמן של  2^{255} עם  2^{11.37} מפתחות. ב-2008 פותחה התקפה נגד Salsa20/7 בזמן של  2^{153} וכן התקפה על Salsa20/8 בזמן של  2^{251}. ב-2012 התקפה של אמסון ושי כנגד Salsa20/8 הצליחה לשבור את הצופן בזמן של  2^{109} או בזמן של  2^{250} במקרה של מפתח 256 סיביות עם 8 סבבים. ב-2013 פורסמה הוכחה שצופן סלסה מעל 15 סבבים בטוח כנגד התקפה דיפרנציאלית, כלומר לא נמצאו מאפיינים דיפרנציאליים בהסתברות גבוהה מ- 2^{-130} כך שהיא אינה יעילה מכוח גס.
Salsa20 מהיר יותר מ-AES ובמבחני ביצועים של eSTREAM נמצא שבעשרים סבבים הצופן מסוגל להצפין בקצב של 3.93 מחזורי שעון לבית על Xeon בעל ליבה כפולה 3 גיגה-הרץ. כמו כן קיימות שתי גרסאות של הצופן פחותות סבבים הנקראות Salsa20/8 ו-Salsa20/12 עם שמונה סבבים או 12 סבבים בהתאמה, המיועדים למשתמשים הרואים צורך בצופן יעיל ומוכנים להקריב מעט בביטחונו.
ChaCha

ב-2008 הציע דניאל ברנשטיין את משפחת ChaCha שהיא גרסה משופרת של צפני זרם החולקת אותם עקרונות תכנון עם Salsa20 אך בשינויים קלים שנועדו בעיקר להגברת רמת הפיזור (diffusion) של הצופן. הפיזור הנוסף אינו בא על חשבון ביצועים, כמו ב-Salsa20 בכל סבב מתבצעים 16 פעולות חיבור, XOR והזזה מעגלית בהיסטים קבועים וכן נשמרת אותה רמת מקביליות ואף יותר. ההערכה היא שגרסאות ChaCha מספקות עמידות גבוהה יותר נגד קריפטואנליזה ומשפרות במעט את הביצועים אם כי רק על פלטפורמות מסוימות. בגלל אחידות כמות העבודה בכל סבב, למספר הסבבים השפעה ישירה על ביצועי הצופן. מסיבה זו הוצעו גרסאות מופחתות סבבים לשיפור ביצועים על חשבון ביטחון. ChaCha8 מבוסס על Salsa20 עם שמונה סבבים, ChaCha12 על Salsa20 עם 12 סבבים בהתאמה. ההבדלים בין צופן Salsa וצופן ChaCha הם כדלהלן:
ChaCha > פונקציית QuarterRound

פונקציית הסבב הפנימית של ChaCha גם היא מבצעת 4 פעולות חיבור, 4 פעולות XOR ו-4 פעולות הזזה מעגלית על ארבעה משתני המצב הפנימי אך בסדר שונה. ב-Salsa20 כל משתנה מעודכן בפעולה אחת למשל  b=b\oplus ((a\boxplus d)\lll 7). לעומתו ב-ChaCha כל מילה מעודכנת פעמיים בנפרד, כך שכל מילת קלט משפיעה על מילות קלט אחרות בשני הכיוונים. אפשר לראות על ידי מעקב אחרי כל סיבית כי ב-ChaCha לפחות 12.5 סיביות בממוצע משתנות בכל סבב לעומת רק 8 ב-Salsa20.
בנוסף קיים הבדל פחות משמעותי בערכי ההיסטים הקבועים של ההזזה המעגלית 16,12,8,7 לעומת 7,9,13,18 ב-Salsa20. ההשפעה של הבדל זה על ביטחון הצופן זניחה. לעומת זאת קיים שיפור במהירות על פלטפורמות מסוימות.
ChaCha > מטריצת הקלט

בצופן Salsa20 הקלט המורכב מוקטור אתחול ומונה בלוקים וכן שמונה מילות מפתח וארבע מילים קבועות, נטענים לתוך טבלה או מטריצה ראשונית  4\times 4 במבנה זה:
| 0 | 1 | 2 | 3 |
| --- | --- | --- | --- |
קבוע: מפתח
| מפתח | קבוע | קלט | קלט |
| קלט | קלט | קבוע | מפתח |
| מפתח | מפתח | מפתח | קבוע |
בכל הרצה של הצופן הפונקציה הפנימית מעבדת במקביל את עמודות המטריצה האמורה  r פעמים ואז מחברת את התוצאה הסופית עם המטריצה הראשונית לקבלת 16 מילים של הפלט. במימושי תוכנה ממוטבים של Salsa20 נהוג היה לבצע תחילה תמורה פנימית של המטריצה הראשונית כך שהעמודה השנייה מוסטת שורה אחת כלפי מעלה, העמודה השלישית שתי שורות כלפי מעלה והרביעית שלוש ומתקבל:
| 0 | 1 | 2 | 3 |
| --- | --- | --- | --- |
קבוע
| מפתח | קלט | מפתח | מפתח |
| קלט | מפתח | מפתח | קלט |
| מפתח | מפתח | קלט | מפתח |
השפעת השינוי על ביטחון הצופן זניחה, לעומת זאת חל שיפור בביצועים כיוון שכעת ניתן לממש ארבעה רבעים של הפונקציה הפנימית בהוראת SIMD אחת על וקטורים (ראה עיבוד מקבילי). הרעיון הוא שהיות שהפונקציה הפנימית מופעלת על כניסות המטריצה באלכסונים, ההיסט גורם לכך שהאלכסון יהפוך לעמודה ואז ניתן להבצע את החישוב בפקודה אחת. שינוי דומה נעשה בסבב השני וכן הסבב השלישי כמו הראשון והרביעי כמו השני. רעיון דומה נעשה ב-ChaCha מאותה סיבה אך בשלושה שינויים. תחילה נעשה השינוי בסדר המילים בבלוק הפלט כדי להתאימו לשינוי המתואר לעיל. זאת על מנת לשפר ביצועים על פלטפורמות התומכות ב-SIMD. בנוסף המטריצה הראשונית מסודרת אחרת:
| 0 | 1 | 2 | 3 |
| --- | --- | --- | --- |
קבוע
מפתח
מפתח
קלט
הנתונים פשוט נטענים לפי סדר קליטתם כאשר הקלט שהוא בשליטת המשתמש (וכן התוקף במקרה של קריפטואנליזה) מוצב בשורה האחרונה. הסבב הראשון תחילה מחבר את הקבועים למפתחות ואז מבצע XOR של התוצאות עם הקלטים, מבצע הזזה מעגלית ושוב מחבר עם המפתחות וכן הלאה. השינוי השלישי הוא, עיבוד השורות מתבצע באותו סדר בכל הסבבים לפי המוצג בתרשים הבא:
ארבעת הרבעים של כל סבב תמיד מסודרים מלמעלה למטה מה שמוסיף מהיבט של מהירות. פונקציית הגיבוב BLAKE הנמנית עם רשימת הפינלסטים של תחרות הגיבוב של NIST וגרסת ההמשך שלה BLAKE2 מבוססים על ChaCha.
ChaCha > שימושים

ב-2014 אימצה גוגל את ChaCha יחד עם קוד אימות מסרים Poly1305 כתחליף ל-RC4 ב-OpenSSL. כמו כן המימוש של גוגל עבור TLS משמש להגנה על תעבורת הרשת (HTTPS) בין דפדפן כרום לאנדרואיד לבין אתרי גוגל. באופן דומה האלגוריתם שולב בפרוטוקול OpenSSH. הצופן ChaCha נכלל גם במערכות ההפעלה OpenBSD ו-NetBSD. וכן הוצע לפרוטוקול IPSec בטיוטה RFC 7539 וטיוטה RFC 7634. פונקציית הגיבוב BLAKE מבוססת על ליבת צופן ChaCha בשינויים מינוריים.
קוד לדוגמה

להלן קוד C++‎ שלם של צופן ChaCha20 המלא (20 סבבים). למען הבהירות הקוד אינו ממוטב והוא תואם את ההמלצה המופיעה באתר המפתח. ההנחה שהמהדר תומך בסדר בתים קטן. הפונקציה ‎_lrotl‎  היא  פונקציית הזזה מעגלית לשמאל הכלולה בספרייה הסטנדרטית של VS. אפשר לשנות את מספר הסבבים בפונקציה ChaCha_encrypt בקריאה לפונקציה Salsa20_Rounds בהתאם לצורך, למשל לגרסת שמונה סבבים יש לציין 8 בפרמטר האחרון, ערכים מומלצים הם 8,12 או 20.
typedef unsigned char byte;
typedef unsigned int uint;

#define BYTES_TO_INT(p) (((uint*)(p))[0])
#define INT_TO_BYTES(p, v) (((uint*)(p))[0] = (v))
#define ROTATE(v,c) (_lrotl(v, c))
#define XOR(v,w) ((v) ^ (w))
#define PLUS(v,w) ( (uint)(((v) + (w)) & 0xFFFFFFFF))
#define PLUSONE(v) (PLUS((v),1))

typedef struct
{
   uint input[16];
} ChaCha_Context;

#define QUARTERROUND(a,b,c,d) \
  x[a] = PLUS(x[a],x[b]); x[d] = ROTATE(XOR(x[d],x[a]),16); \
  x[c] = PLUS(x[c],x[d]); x[b] = ROTATE(XOR(x[b],x[c]),12); \
  x[a] = PLUS(x[a],x[b]); x[d] = ROTATE(XOR(x[d],x[a]), 8); \
  x[c] = PLUS(x[c],x[d]); x[b] = ROTATE(XOR(x[b],x[c]), 7);

static const char sigma[] = "expand 32-byte k";
static const char tau[] = "expand 16-byte k";

static void Salsa20_Rounds(byte output[64], const uint input[16], uint nrounds)
{
	uint x[16];

	for (uint i = 0; i < 16; ++i) 
		x[i] = input[i];

	for (uint i = nrounds; i > 0; i -= 2) {
		QUARTERROUND( 0, 4,  8, 12)
		QUARTERROUND( 1, 5,  9, 13)
		QUARTERROUND( 2, 6, 10, 14)
		QUARTERROUND( 3, 7, 11, 15)
		QUARTERROUND( 0, 5, 10, 15)
		QUARTERROUND( 1, 6, 11, 12)
		QUARTERROUND( 2, 7,  8, 13)
		QUARTERROUND( 3, 4,  9, 14)
	}
	for (uint i = 0; i < 16; ++i) 
		x[i] = PLUS(x[i], input[i]);

	for (uint i = 0; i < 16; ++i) 
		INT_TO_BYTES(output + 4 * i, x[i]);
}


void ChaCha_keysetup(ChaCha_Context *ctx, const byte *k, uint kbits, uint ivbits)
{
	const char *constants;

	ctx->input[4] = BYTES_TO_INT(k + 0);
	ctx->input[5] = BYTES_TO_INT(k + 4);
	ctx->input[6] = BYTES_TO_INT(k + 8);
	ctx->input[7] = BYTES_TO_INT(k + 12);

	if (kbits == 256) { // recommended
		k += 16;
		constants = sigma;
	}
	else { // kbits == 128
		constants = tau;
	}
	ctx->input[8] = BYTES_TO_INT(k + 0);
	ctx->input[9] = BYTES_TO_INT(k + 4);
	ctx->input[10] = BYTES_TO_INT(k + 8);
	ctx->input[11] = BYTES_TO_INT(k + 12);
	ctx->input[0] = BYTES_TO_INT(constants + 0);
	ctx->input[1] = BYTES_TO_INT(constants + 4);
	ctx->input[2] = BYTES_TO_INT(constants + 8);
	ctx->input[3] = BYTES_TO_INT(constants + 12);
}

void ChaCha_ivsetup(ChaCha_Context *ctx, const byte *iv)
{
	ctx->input[12] = 0;
	ctx->input[13] = 0;
	ctx->input[14] = BYTES_TO_INT(iv + 0);
	ctx->input[15] = BYTES_TO_INT(iv + 4);
}

void ChaCha_encrypt(ChaCha_Context *ctx, const byte *m, byte *c, uint bytes)
{
	byte output[64];

	if (!bytes) return;
	for (;;) {
		Salsa20_Rounds(output, ctx->input, 20);
		ctx->input[12] = PLUSONE(ctx->input[12]);
		if (!ctx->input[12]) {
			ctx->input[13] = PLUSONE(ctx->input[13]);
			// stopping at 2^70 bytes per nonce is user's responsibility
		}
		if (bytes <= 64) {
			for (uint i = 0; i < bytes; ++i) c[i] = m[i] ^ output[i];
			return;
		}
		for (uint i = 0; i < 64; ++i) c[i] = m[i] ^ output[i];
		bytes -= 64;
		c += 64;
		m += 64;
	}
}
וקטור בדיקה

מפתח (32 בתים):
וקטור אתחול (8 בתים):
מספר סבבים: 20
64 בתים פסאודו אקראיים הראשונים של פלט הצופן בבסיס הקסדצימלי:
ראו גם

צופן זרם
RC4
הערות שוליים

↑  Snuffle 2005: the Salsa20 encryption function
↑  eSTREAM: the ECRYPT Stream Cipher Project
↑  Truncated differential cryptanalysis of five rounds of Salsa20
↑  Simon Fischer, Willi Meier, Côme Berbain, Jean-Francois Biasse, Matt Robshaw, Non-Randomness in eSTREAM Candidates Salsa20 and TSC-4, Indocrypt 2006
↑  Yukiyasu Tsunoo, Teruo Saito, Hiroyasu Kubo, Tomoyasu Suzaki and Hiroki Nakashima (2007-01-02)
↑  Zhenqing Shi, Bin Zhang, Dengguo Feng, Wenling Wu (2012): „Improved Key Recovery Attacks on Reduced-Round Salsa20 and ChaCha“. Information Security and Cryptology – ICISC 2012. Springer Verlag, 2013, pp. 337-351
↑  Nicky Mouha, Bart Preneel (2013)
↑  The Salsa20 family of stream ciphers
↑  The ChaCha family of stream ciphers
↑  ChaCha20-Poly1305 Cipher Suites for Transport Layer Security (TLS)  draft-ietf-tls-chacha20-poly1305-04
↑  Google Swaps Out Crypto Ciphers in OpenSSL
↑  Super User's BSD Cross Reference: PROTOCOL.chacha20poly1305
↑  The ChaCha family of stream ciphers
תיאור הפונקציה הפנימית QuarterRound של צופן Salsa
אוחוס דל סלאדו

| --- | --- |

 מידע כללי
 סוג הר:  הר געש שכבתי פעיל
 גובה:  6,893 מטר
 מדינה:  צ'ילה, ארגנטינה 
 מיקום:  ארגנטינה וצ'ילה
 רכס הרים:  הרי האנדים
 מספר הר געש:  =1505-13
 התפרצות אחרונה:  700~
 העפלה ראשונה:  1937
 קואורדינטות:  27°06′35″S 68°32′32″W﻿ / ﻿27.109611°S 68.54225°W﻿ / -27.109611; -68.54225
  (למפת ארגנטינה מוגדלת) בואנוס איירס קורדובה בארילוצ'ה רוסאריו טוקומאן מאר דל פלאטה סלטה סנטה פה סן חואן אושואיה איגואסו אקונקגווה ברזיל פרגוואי בוליביה צ'ילה איי פוקלנד אורוגוואי האוקיינוס האטלנטי האוקיינוס השקט אוחוס דל סלאדו(למפת ארגנטינה רגילה) בואנוס איירס קורדובה בארילוצ'ה רוסאריו טוקומאן מאר דל פלאטה סלטה סנטה פה סן חואן אושואיה איגואסו אקונקגווה ברזיל פרגוואי בוליביה צ'ילה איי פוקלנד אורוגוואי האוקיינוס האטלנטי האוקיינוס השקט אוחוס דל סלאדו
 
נוואדו אוחוס דל סלאדו (בספרדית: Nevado Ojos del Salado, מילולית - ההר המושלג "עיני מֶלַח"; מקור השם מלגונות משקעי המלח בצורת עיניים על מורדות ההר) הוא הר געש שכבתי פעיל בהרי האנדים, בגבול ארגנטינה וצ'ילה. גובהו 6,893 מ' מעל פני הים, והוא ההר השני בגובהו בחצי הכדור המערבי ובחצי הכדור הדרומי אחרי אקונקגווה, והר הגעש הגבוה ביותר בעולם כולו. להר שתי פסגות, והגבול בין ארגנטינה לבין צ'ילה עובר בין שתיהן. הפרש הגבהים בין הפסגות הוא פחות ממטר אחד.
ההר ממוקם בשולי מדבר אטקאמה, באזור דליל במשקעים. משכך, פסגתו מכוסה שלג בדרך כלל רק בחורף. עם זאת, בלועו יש אגם לוע בקוטר של כ-100 מטרים. גובהו של אגם זה, 6,390 מ' מעל פני הים, הופך אותו לאגם הגבוה בעולם.
אוחוס דל סלאדו נחשב להר געש פעיל, אף שההתפרצות האחרונה שלו, לפי הערכות מכון הסמית'סוניאן, הייתה לפני כ-1,300 שנים, בשל פעילות של פומרולות, ומשום שב-1993 נצפו בהר פליטות אפר מעטות.
הסלעים השולטים בהר הם דקיט וריודקיט (סלע געשי שהרכבו בין דקיט לריוליט), עשירים באשלגן. המינרלים המאפיינים את הלבה שלו עשירים בביוטיט, הורנבלנדה ופלגיוקלז, ובמידה מעטה יותר מכילים גם אוגיט, קוורץ והיפרסתן.
העפלות

הראשונים שהעפילו לפסגתו של ההר היו החוקרים הפולנים יאן אלפרד שְצֶ'פַּנְסקי ויוסטין ווֹישְניס, בשנת 1937. הצ'יליאנים גונסאלו בראבו ואדוארדו קנאלס מויה טיפסו על ההר באמצעות רכב ממונע בשנת 2007, והצליחו להגיע עד לגובה של 6,688 מטרים; זהו הגובה הרב ביותר אליו הצליח להגיע רכב ממונע בדרך היבשה, והשיא נרשם בספר השיאים של גינס. בשנת 2012 הגיעו שלושה אופנוענים, האוסטרי לוקאס מצינגר, האמריקני ברטון צ'רצ'יל והבריטי-אוסטרלי וולטר קולבאץ', לגובה של 6,361 מטרים.
הערות שוליים

↑  Nevado Ojos del Salado — South America’s Second Highest Mountain
| --- | --- |
בקרת זהויות :  GND: 4408245-9  NKC: ge876370  VIAF: 248707531   WorldCat (עם VIAF): 248707531
אזו (כימיה)

| --- | --- |
 
 
מתיל אוראנז', תרכובת אזו המשמשת כחומר צבע
אבקת מתיל אוראנז'
אזו (באנגלית: Azo) היא קבוצה פונקציונלית הקיימת בתרכובות אורגניות; תרכובות אלו מכונות תרכובות אזו.
קבוצת אזו מורכבת משני אטומי חנקן הקשורים ביניהם בקשר קוולנטי כפול (N=N). לכל אחד מאטומי החנקן קשורה קבוצה נוספת כלשהי. קבוצת אזו קרויה גם דיאימיד (Diimide). השם אזו מקורו במילה הצרפתית המיושנת azote, "חנקן". מילה זו מקורה ביוונית ופירושה "לא חי".
הקבוצות הנוספות הקשורות לאטומי החנקן עשויות להיות אליפטיות או ארומטיות, אך בתרכובות האזו היציבות והשכיחות ביותר הקבוצות הארומטיות (לעיתים קרובות: טבעות בנזן) הן הדומיננטיות. הסיבה לכך היא יציבות באמצעות רזוננס כימי: אלקטרוני הקשר הכפול בין אטומי החנקן משתתפים ברזוננס של הטבעת הארומטית. רזוננס זה גורם גם לכך שתרכובות אזו ארומטיות רבות הן צבעוניות; קבוצה גדולה של צבעים תעשייתיים נקראת צבעי אזו (באנגלית: Azo dyes).
לתרכובות אזו אליפטיות שימוש בסינתזה כימית. חום או קרינה גורמים לקבוצת האזו להשתחרר מהמולקולה כגז חנקן (N2); השיירים הנותרים מהווים רדיקלים, בהם ניתן להשתמש בתגובות שרשרת רדיקליות.
ניתן לסנתז תרכובות אזו ארומטיות באמצעות תגובה המכונה צימוד אזו (Azo coupling). זוהי תגובת התמרה נוקלאופילית בין פנול או אנילין ובין יון דיאזוניום (R-N+≡N). היון החיובי משמש כאלקטרופיל והטבעת הארומטית של פנול או אנילין מהווה נוקלאופיל:
תגובת צימוד אזו בין יון דיאזוניום (משמאל) ובין פנול (המיוצג כאן כיון פנוקסיד, -Ph-O)
אחמד נגיב אל-הילאלי

אחמד נגיב אל-הילאלי (ערבית: احمد نجيب الهلالي; 1 באוקטובר 1891 – דצמבר 1958) היה עורך דין ופוליטיקאי מצרי שכיהן פעמיים בשנת 1952 כראש ממשלת מצרים. כהונתו השנייה, שארכה יום אחד, הסתיימה בעקבות מהפכת הקצינים החופשיים.