בכל סבב האלגוריתם משתמש בכפולה שונה של formula_14. המטרה היא לטשטש את מבנה הפונקציה formula_8 ולגרום לה להשתנות בתדירות גבוהה, כדי למנוע התקפה מאוד קלה לשבירת האלגוריתם. לדעת המפתחים ערכו של formula_14 אינו עקרוני, רצוי שיהיה אי זוגי ובלבד שלא יהיה ערך גרוע. כלומר כל ערך שמניב אפקט שינוי איטי.
ביטחון.
בצופן TEA המקורי התגלו מספר חולשות. דויד וגנר, ג'ון קלסי וברוס שנייר גילו ב-1996 שבגלל העדר תהליך הכנת מפתח הצפנה אפשר לבצע התקפת גלוי-נבחר בסיבוכיות של formula_21 פעולות הצפנה עם "מפתחות קשורים" (מפתחות שקיים יחס כלשהו ביניהם, כמו מפתחות שההבדל ביניהם הוא בסיבית אחת). הפונקציה הפנימית חלשה מדי ואפקט הפיזור איטי מאוד וקיימת קריפטואנליזה מוצלחת של הצופן במספר סבבים מופחת וכן התגלה שהצופן סובל מתופעה הנקראת "מפתחות שקולים". לכל מפתח קיימים שלושה מפתחות נוספים (שאם מצפינים עם מפתחות אילו מתקבלת תוצאה זהה). עובדה זו מצמצמת אפקטיבית את טווח המפתח ל-formula_22 סיביות. עובדה זו משליכה גם שהצופן יהיה גרוע מאוד לשימוש כחלק מפונקציית גיבוב בגלל שקל למצוא התנגשויות (עובדה שנוצלה לפיצוח קונסולת המשחקים Xbox של מיקרוסופט).
בשל הקריפטואנליזה של האלגוריתם הקודם במשפחה הציעו ווילר ונידהם ב-1998 הרחבה של הצופן שבה נעשה ניסיון לתקן את הבעיות המנויות. ההרחבה נקראת XTEA או Extended TEA. הם הכניסו מספר שינויים מינוריים, ביניהם שינוי במספר ההזזות, הזזות בכיוונים מנוגדים, תהליך הכנת המפתח הורחב וכן נעשה שינוי באופן ניצול המפתח. הם ניסו לשמר את מאפייני הצופן, פשטות ותמציתיות. בעיית הפיזור האיטי ואי-הליניאריות החלשה נותרו בעינם, אך לטענתם מספר החזרות הגבוה מספק מרווח ביטחון סביר.
קוד האלגוריתם.
XTEA(long* v, long* k, long N)
ulong y = v[0], z = v[1], DELTA = 0x9e3779b9;
if (N &gt; 0) { /* coding */
ulong limit = DELTA * N, sum = 0;
while (sum != limit) {
y += (z « 4 ^ z » 5) + z ^ sum + k[sum &amp; 3];
sum += DELTA;
z += (y « 4 ^ y » 5) + y ^ sum + k[sum » 11 &amp; 3];
} else { /* decoding */
ulong sum = DELTA * (-N);
while (sum) {
z -= (y « 4 ^ y » 5) + y ^ sum + k[sum » 11 &amp; 3];
sum -= DELTA;
y -= (z « 4 ^ z » 5) + z ^ sum + k[sum &amp; 3];
v[0]=y, v[1]=z ;
כאשר formula_23 מכיל את הקלט כשהוא מחולק לשתי מילים, formula_24 מכיל את המפתח המחולק ל-4 מילים ו-formula_25 מייצג את מספר הסבבים (32 לפי ההמלצה). כאן אם formula_25 חיובי האלגוריתם מבצע הצפנה ואילו אם formula_25 שלילי האלגוריתם מבצע פענוח.
Block TEA.
במקביל הציעו המפתחים שינוי נוסף כדי לתמוך בבלוקים גדולים. במילים אחרות, היכולת להתאים את האלגוריתם לבלוק בכל אורך רצוי מיתרת את הצורך במצב הפעלה. הגרסה החדשה נקראה על ידם Block TEA. בדומה לקודמיו זהו צופן בלוקים איטרטיבי בסגנון רשת פייסטל, המורכב מפונקציה פנימית פשוטה בתכלית ומספר סבבים גבוה. פעולות הצופן נותרו זהות לצופן הקודם במשפחה XTEA אך מבוצעות באופן מחזורי על כל בלוק הקלט. תהליך הכנת המפתח השתנה בהתאם. פונקציית הערבוב הפנימית שהיא בתמצית: formula_28, מקיפה את הקלט במעגליות מספר פעמים. אם מבוצעים 64 סבבים, כשבכל סבב מבוצעות שש פעולות אריתמטיות על כל מילת קלט, יוצא שכל מילה מעובדת formula_29 פעמים ובסך הכול מופעלות בממוצע לפחות 6 פעולות ערבוב על כל מילה. אם formula_30 גרסה זו מהירה יותר מ-XTEA למרות התקורה הנוספת, אולם אם formula_31 היא איטית יותר. המפתחים מציינים שהם אינם יכולים להוכיח בוודאות שגרסה זו בטוחה מהקודמת, אך הם ממליצים להשתמש בה מכמה סיבות ביניהן: אפקט הפיזור גבוה יותר ונשמר לאורך כל הקלט וכן האלגוריתם מדמה צופן זרם בכך שהוא מקבל קלט בכל אורך רצוי ולכן אין צורך במצב הפעלה של צופן בלוקים.
קוד האלגוריתם.
long TEAB(long* v, long n, long* k)
ulong z, sum = 0, e, DELTA = 0x9e3779b9;
long m, p, q;
if(n &gt; 1){ /* Coding Part */
z = v[n-1];
q = 6 + 52 / n;
while (q-- &gt; 0){
sum += DELTA;
e = sum » 2 &amp; 3;
for (p = 0; p &lt; n; p++)
z = v[p] += (z « 4 ^ z » 5) + z ^ k[p &amp; 3 ^ e] + sum;
return 0;
} else if (n&lt;-1) { /* Decoding Part */
n = -n;
q = 6 + 52 / n;
sum = q * DELTA;
while (sum != 0) {
e = sum » 2 &amp; 3;
for (p = n-1; p &gt; 0; p--) {
z = v[p-1];
v[p] -= (z « 4 ^ z » 5) + z ^ k[p &amp; 3 ^ e] + sum;
z = v[n-1];
v[0] -= (z « 4 ^ z » 5) + z ^ k[p &amp; 3 ^ e] + sum
sum -= DELTA;
return 0;
return 1;
} /* Signal n=0 */
ביטחון.
ביטחון הצפנים Block TEA ו-XTEA חלש אפילו מ-TEA. זמן קצר לאחר הצגתם גילה Markku-Juhani Saarinen קריפטואנליזה לפי מודל התקפת מוצפן-נבחר נגד Block TEA שיכולה לנחש את מפתח ההצפנה בסיבוכיות של formula_32 שאילתות. זוהי סוג של קריפטואנליזה דיפרנציאלית שמתמקדת בפונקציית הערבוב הפנימית בגלל שהיא אינה פונקציה על וקיימת אסימטריה בהתפתחות הדיפרנציאלית בין ההצפנה לפענוח. בנוסף כמו באלגוריתמים הקודמים, קיימת קריפטואנליזה של קלסי ושנייר שמעידה על בעיות בהכנת המפתח וחולשות נוספות. מסיבה זו הצופן אינו ראוי לשימוש כתחליף לאלגוריתם ברמה של AES אך ייתכן שיהיה שימושי בתנאים מסוימים. הוא אטרקטיבי בשל היותו פשוט מאוד.
XXTEA.
צופן XXTEA הוא גרסה מתוקנת של Block TEA לאחר שהמפתחים הודו כי הקריפטואנליזה שלו אכן ריאלית ומצריכה שינוי. בצופן XXTEA בוצעו מספר שינויים, תחילה ראוי לציין שההצפנה בגרסת Block TEA שונה מהפענוח מהיבט של "התפתחות דיפרנציאלית", בתהליך הפענוח ההתפתחות היא בשיעור של מילה אחת לסבב מה שמאפשר התקפת הבחנה מסוג "מוצפן-נבחר" דבר שתוקן בגרסה החדשה. כמו כן המפתחים שינו את הערכי ההזזות כדי שיעילות האלגוריתם לא תפגע אם formula_31 וכן סדר הפעולות בפונקציה הפנימית השתנה מעט להגברת אי-הליניאריות. באופן כללי פונקציית הערבוב השתנתה ל-formula_34 כאשר formula_35 גדל או פוחת מודולו formula_36. לדעת המפתחים נראה שהשינויים פתרו את הבעיות שהועלו אך לא בטוח שהם לא יצרו בעיות חדשות.
קוד האלגוריתם.
להלן תיאור קוד האלגוריתם לצורך ייחוס במימוש לא ממוטב בשפת C:
long XXTEA(long* v, long n, long* k)
ulong z, y, sum = 0, e, DELTA = 0x9e3779b9;
long m, p, q;
if(n &gt; 1){ /* Coding Part */
z = v[n-1];
q = 6 + 52 / n;
while(q-- &gt; 0){
sum += DELTA;
e = sum » 2 &amp; 3;
for (p = 0; p &lt; n-1; p++)
y = v[p+1], z = v[p] += MX
y = v[0];
z = v[n-1] += MX
return 0;
} else if (n &lt;-1) { /* Decoding Part */
n = -n;
q = 6 + 52 / n;
sum = q * DELTA;
while(sum != 0) {
e = sum » 2 &amp; 3;
for (p = n-1; p &gt; 0; p--)
z = v[p-1], y = v[p] -= MX
z = v[n-1] ;
y = v[0] -= MX
sum -= DELTA ;
return 0;
return 1;
} /* Signal n=0,1,-1 */
ביטחון.
ביטחון אלגוריתם XXTEA אינו שפיר בהרבה מקודמיו. למרות השיפורים ההתקפות המתוארות לעיל חלקן עדיין ישימות אם כי בסיבוכיות גבוהה יותר. בכל מקרה סיבוכיות ההתקפות הללו במסגרת מודל התקפת גלוי-נבחר או התקפת מוצפן-נבחר נמוכה מ-formula_37 כפי שצפוי במקרה של כוח גס בניחוש מפתח באורך 128 סיביות ולכן האלגוריתם אינו מוגדר בטוח במסגרת מודלים אילו ברמה גבוהה. ב-2010 גילה Elias Yarrkov התקפת גלוי-נבחר נגד הצופן שמסוגלת לנחש את מפתח ההצפנה בסיבוכיות זמן של formula_1. כאשר בלוק הקלט מכיל לפחות 53 מילים מספר פעולות הערבוב לבלוק מצטמצם ל-6 בקירוב. עובדה זו פותחת פתח לקריפטואנליזה דיפרנציאלית. נראה שהבעיות בצופן הן אינהרנטיות ולכן שינויים מינוריים כפי שהוצע עד כה לא יספיקו כדי לפתור אותן. הסיבות הן הפשטות הרבה מדי של הצופן והעדר תהליך הכנה ראוי של מפתח ההצפנה.
למרות האמור בתנאים בהם לא ניתן לבצע התקפה לפי המודלים המתוארים (התקפה שבה מניחים שליריב היכולת "לבקש" מהקורבן זוגות רבים של טקסטים גלויים וטקסטים מוצפנים עם אותו מפתח הצפנה), ייתכן שאפשר יהיה לעשות שימוש בצופן באופן הרגיל אך לא כחלק מפונקציית גיבוב.
וקטור בדיקה.
להלן וקטור הבדיקה של הגרסאות השונות של TEA עם בלוק קלט באורך 64 סיביות וערכים אקראיים:
TEA(70666f71756a6e62636a67627366626d, 756972636c677270) = 436358c7d1e15fcb
XTEA(2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F, 2F2F2F2F2F2F2F2F) = 0e28c8467f07bbff
XXTEA(0102040810204080fffefcf8f0e0c080, 0000000000000000) = d1e78be2c746728a
נימוק
Holyland Bikepacking Challenge
הר צ'פרן
הר צ'פרן (באנגלית: Mount Chephren) הוא הר בהרי הרוקי הקנדיים הממוקם לצד עמק נהר מיסטאיה בפארק הלאומי באנף, בפרובינציית אלברטה שבקנדה.
הר צ'פרן הוא ההר ה-76 בגובהו באלברטה.
מקור השם.
ההר, שצורתו כצורת פרמידה, ובשל תלילות צוקיו אינו מכוסה בשלג, ועל כן נראה כפרמידה שחורה, נקרא על שם פרעה חאפרו (באנגלית: צ'פרן - מיוונית: Χεφρήν). שמו של ההר ניתן לו בשנת 1897, על ידי ג'י נורמן קולי, אשר קרא להר "הר הפרימדה" (Pyramid Mountain). בהרי הרוקי הקנדיים היו באותה עת שבעה הרים בשם זה, ועל מנת למנוע בלבול, ב-31 במרץ 1924 שונה שמו של ההר לשמו הנוכחי - שמו של בונה אחת משלוש הפרמידות במתחם הפירמידות בגיזה.
טיפוס.
ההר נחשב קשה מאוד לטיפוס בשל מורדותיו התלולים, ותנאי מזג אוויר קשים (שלג וקור).
התנאים הטובים ביותר לטיפוס מתקיימים בסוף יולי ואוגוסט.