הצפנה מבוססת עקום אליפטי

הצפנה מבוססת עָקֹם אֶלִיפְּטִי או בקיצור הצפנת עקום אליפטי (באנגלית: Elliptic Curve Cryptography, בקיצור ECC), היא שיטת הצפנה אסימטרית העושה שימוש במבנה האלגברי-גאומטרי הנקרא עקום אליפטי מעל שדה סופי גדול, למימוש מערכת כגון פרוטוקול דיפי-הלמן או צופן אל-גמאל. הדעה הרווחת היא שבבחירת פרמטרים מושכלת, ניתן להשיג בדרך זו אלגוריתמים מהירים ויעילים באופן משמעותי מאלו המבוססים על אריתמטיקה מודולרית בשל העובדה שמפתח ההצפנה קצר יותר מאשר בהצפנה אסימטרית רגילה, ללא פגיעה בביטחון המידע. בשל עובדה זו הצפנה מבוססת עקומים אליפטיים אטרקטיבית במיוחד בחומרה מוגבלת במשאבים כמו סנסור אלחוטי, כרטיס חכם או מערכות משובצות. רעיון השימוש בעקום אליפטי ככלי קריפטוגרפי הועלה לראשונה ב-1985 על ידי ויקטור מילר ומעט מאוחר יותר על ידי ניל קובליץ.

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

הצפנת מפתח-פומבי מבוססת על פונקציה חד כיוונית עם דלת מלכודת (Trapdoor), שהיא מידע נוסף שבלעדיו חישוב הפונקציה ההופכית הוא משימה קשה. בהקשר זה המידע הנוסף הוא המפתח הפרטי שנשמר בסוד. השיטות הנפוצות כמו RSA מתבססות על מספר מצומצם של בעיות מתמטיות קשות כפירוק לגורמים ובעיית הלוגריתם הבדיד בחבורות. השאיפה היא שפענוח ההצפנה ללא המפתח יהיה קשה לפחות כפתרון הבעיה המתמטית עליה היא מבוססת; טענה שלא הוכחה מתמטית בכל השיטות האסימטריות (למעט הצפנת רבין). חסרונן העיקרי של שיטות אלו הוא באורך מפתח ההצפנה. בשל ההתקדמות הטכנולוגית (בעיקר בתחום פירוק לגורמים) ופגיעותן לאלגוריתמים לפתרון בעיות אלה, המפתחות חייבים להיות בסדר גודל של אלפי ספרות בינאריות. עובדה המאפילה על יעילותם, כיוון שחישובים אריתמטיים בסדר גודל כזה איטיים מאוד. אולם ניתן ליישם מערכת מפתח-פומבי בכל סביבה מתמטית שמספקת פונקציה חד-כיוונית כמו עקום אליפטי. בשל כך הצפנת עקום אליפטי זוכה להתעניינות רבה, ה-NSA כינה אותה "הדור השני" של הצפנת מפתח-פומבי, משום שהאלגוריתמים הטובים ביותר הידועים כיום לפתרון הבעיות המתמטיות הנפוצות, אינם ישימים נכון להיום בעקומים אליפטיים.

==הגדרה כללית==
דוגמאות של עקום אליפטי מעל השדה הממשי.

עקום אליפטי הוא עקום אלגברי פרויקטיבי חלק המוגדר על ידי משוואה ממעלה שלישית. ניתן להגדיר עקום אליפטי מעל כל שדה (כלומר שהמקדמים הם אלמנטים בשדה). מעל שדה בעל מאפיין שאינו 2 או 3, אפשר להגדיר את העקום לפי נוסחאות ויירשטראס בעקום אליפטי מהצורה:

: <math>\ \boldsymbol{y^2 = x^3 + ax + b}</math>

כאשר <math>\ a</math> ו- <math>\ b</math> הם אלמנטים קבועים מהשדה <math>\mathbb{F}</math>, בניסוח פורמלי <math>a,b\in\mathbb{F}</math>. העקום הוא קבוצת כל הנקודות המקיימות את המשוואה האמורה, בתוספת נקודה מיוחדת הנקראת "הנקודה באינסוף", אותה מקובל לסמן ב-<math>\ \mathcal{O}</math>. המשוואה מתארת עקום אליפטי אם ורק אם הדיסקרימיננטה <math>\ 4a^3+27b^2 \ne 0</math>.

מעל שדה בעל מאפיין 2, צורתו של העקום האליפטי (שאינו סופרסינגולרי) נתונה על ידי:

: <math>\ \boldsymbol{y^2+xy=x^3+ax^2+b}</math>, כאשר <math>\ b \ne 0</math>

שמם של עקומים אלה מגיע מהאינטגרלים האליפטיים, הקשורים באורך קשת האליפסה. מעל שדה המספרים המרוכבים, העקום איזומורפי לטורוס.
ניתן להגדיר עקום אליפטי גם מעל שדה המספרים הממשיים, למשל אם <math>\ a=-4</math> ו-<math>\ b=0.67</math> מתקבל עקום אליפטי עם המשוואה: <math>\ y^2=x^3-4x+0.67</math>.

על אוסף הנקודות בעקום (לרבות הנקודה באינסוף) אפשר להגדיר פעולה בינארית <math>\ +</math>, ההופכת אותו לחבורה אבלית, שבה הנקודה באינסוף היא הנקודה הנייטרלית. מבחינה מעשית, חישוב הנקודה <math>\ (x_1,y_1) + (x_2,y_2) = (x_3,y_3)</math>, כאשר <math>\ (x_1,y_1)</math> ו- <math>\ (x_2,y_2)</math> נקודות נתונות על העקום, אורך כשלושים פעולות יסודיות של חיבור, כפל וחילוק בשדה שמעליו העקום מוגדר.

קיימים עקומים אחרים כמו עקום קובליץ, עקום מונטגומרי, עקום אדוארד ועקום הסה שלהם שימושים בתחום הקריפטוגרפיה. לכל אחד מהם יתרונות בשדות שונים בהם חיבור וכפל נקודות קל יותר מאשר באחרים. גרסה מפותלת של עקום אדוארד שולבה בעקום 25519 ובעקום 448 שניהם עקומים חדשים הידועים בביטחון וביעילות גבוהים ונוספו כמועמדים לפרוטוקול SSL וכן נכללו מספר תקנים בינלאומיים (ראו ).

==אריתמטיקה בעקומים אליפטיים==
350px
קיימת שיטה ותיקה לחיבור נקודות בעקום אליפטי המיוחסת לדיופנטוס שעושה שימוש במיתר ומשיק. בייצוג גרפי פעולת החיבור של הנקודות <math>P</math> ו-<math>Q</math> היא השתקפות הנקודה השלישית החותכת את הישר העובר דרך שתיהן (ראו תרשים). בחיבור נקודה לעצמה (<math>P+P</math> או <math>2P</math> שנקרא point doubling) התוצאה היא השתקפות הנקודה השנייה החותכת את הישר המשיק לה. כאמור כיוון שהעקום אינו סופרסינגולרי, ישר העובר דרך שתי נקודות יחתוך את העקום בדיוק בנקודה נוספת אחת ויחידה. כאשר הנקודות מתכנסות כלומר הופכות לנקודה אחת הישר המשיק להן יחתוך את העקום בדיוק בנקודה אחת. כדי למצוא את הנקודה השלישית משתמשים ב-<math>\ \lambda</math> המייצג את שיפוע הישר (החותך את הנקודות או המשיק לנקודה במקרה של נקודה יחידה). במקרה של <math>\ \mbox{P + -P}</math> (כאשר <math>\ \mbox{-P}</math> היא נקודת ההשתקפות של <math>\ \mbox{P}</math>) הישר העובר דרכן אנכי ולכן התוצאה מוגדרת כנקודת האין סוף <math>\ \mathcal{O}</math> כתוצאה מכך <math>\ \mbox{P+}\mathcal{O}\mbox{=P}</math>, לכן יש לכלול את נקודת האין סוף בקבוצת נקודות העקום, יחד עם נקודת האין סוף מתקבלת חבורה ציקלית (אבלית).

חוק החיבור בעקום האליפטי <math>E</math> מקיים את הכללים הבאים:
* איבר יחידה. עבור כל נקודה <math>P\in E</math> תמיד מתקיים: <math>P+\mathcal{O}=\mathcal{O}+P=P</math>.
* איבר הופכי. עבור כל נקודה <math>P\in E</math> תמיד מתקיים: <math>P+(-P)=\mathcal{O}</math>.
* אסוציאטיביות. עבור נקודות כלשהן <math>P,Q,R\in E</math> תמיד מתקיים: <math>(P+Q)+R=P+(Q+R)</math>.
* קומוטטיביות. עבור נקודות כלשהן <math>P,Q\in E </math> תמיד מתקיים: <math>P+Q=Q+P</math>.
העקום האליפטי <math>y^2 = x^3 + 2x + 3</math> מעל השדה <math>GF(71)</math> עם 88 נקודות.
שני הכללים הראשונים נכונים כי כל קו אנכי שחותך את העקום חותך גם את נקודת האין סוף <math>\mathcal{O}</math>. וכן חוק האסוציאטיביות מובן כי כל קו שמחבר בין <math>P</math> ל-<math>Q</math> מחבר גם בכיוון ההפוך בין <math>Q</math> ל-<math>P</math> כך שסדר הנקודות אינו חשוב. חוק האסוציאטיביות נובע מהכלל האריתמטי של החיבור.

ניתן להגדיר עקומים אליפטיים מעל כל שדה, אך לצרכים קריפטוגרפים מתמקדים בשדות סופיים. במקרה זה, על אף שניתן להציג את הנקודות על העקום בצורה גרפית, הדבר איננו מקובל. התרשים משמאל ממחיש את העקום האליפטי <math>y^2 = x^3 + 2x + 3</math> מעל השדה <math>GF(71)</math> (המקדמים הם שלמים חיוביים מודולו 71) שנראה כמו תפזורת אקראית של נקודות.

===כללי האריתמטיקה===
כללי האריתמטיקה לעקום אליפטי משתנים בהתאם לשדה עליו הוא מבוסס. בשדה בעל מאפיין גדול מ-2 (לעקום שאינו סופרסינגולרי) תרגום הפעולות הגרפיות לנוסחאות אלגבריות הוא כדלהלן:

סכום שתי נקודות (ECADD) <math>\ \mbox{R=P+Q}</math>:
:<math>\begin{align} x_r &= \lambda^2 - x_p - x_q \\ y_r &= \lambda(x_p - x_r) - y_p \\ \lambda &= \frac{y_q - y_p}{x_q - x_p} \end{align}</math>

הכפלת נקודה יחידה (ECDBL) <math>\ \mbox{R=P+P=2P}</math>, החיבור זהה למעט:
:<math>\lambda = \frac{3x_p^2 + a}{2y_p}</math>

הנקודה ההפכית של <math>\ \mbox{P}=(x,y)</math> היא <math>\ -\mbox{P}=(x,x+y)</math>.

מעל שדה סופי פעולת החילוק מתבצעת על ידי הכפלה בהופכי הכפלי, לדוגמה הפעולה <math>\textstyle\frac{y_q - y_p}{x_q - x_p}</math> שקולה לפעולה <math>(y_q - y_p) \cdot (x_q - x_p)^{-1}\text{ (mod }p)</math>. לשם כך צריך להשתמש באלגוריתם למציאת הופכי כפלי המבוסס על הרעיון של אוקלידס.

===דוגמאות===
לדוגמה יהיו <math>p=23, a=1,b=4</math> ומשוואת העקום <math>E:y^2=x^3+x+4</math> מעל השדה <math>\mathbb{F}_{23} </math> המכיל את 29 הנקודות <math>(x_i,y_i)</math> המובאות להלן יחד עם נקודת האין סוף <math>\mathcal{O}</math>, כאשר <math>x,y\in\mathbb{F}_{23}</math>:

{| dir="ltr"
|-
| width="100" | <math>(0,2)</math> || width="100" | <math>(0,21)</math> || width="100" | <math>(1,11)</math> || width="100" | <math>(1,12)</math> || width="100" | <math>\color{Blue} (4,7)</math> || width="100" | <math>(4,16)</math> || width="100" | <math>(7,3)</math>
|-
| <math>(7,20)</math> || <math>(8,8)</math> || <math>(8,15)</math> || <math>(9,11)</math> || <math>(9,12)</math> || <math>(10,5)</math> || <math>\color{Purple}(10,18)</math>
|-
| <math>(11,9)</math> || <math>(11,14)</math> || <math>\color{Orange}(13,11)</math> || <math>(13,12)</math> || <math>(14,5)</math> || <math>(14,18)</math> || <math>\color{Green}(15,6)</math>
|-
| <math>(15,17)</math>|| <math>(17,9)</math> || <math>(17,14)</math> || <math>(18,9)</math> || <math>(18,14)</math> || <math>(22,5)</math> ||<math>(22,18)</math>
|-
| <math>\mathcal{O}</math>|| || || || || ||
|}

היות ש-<math>p</math> ראשוני, השדה <math>\mathbb{F}_{23}</math> הוא ציקלי (מחזורי) ולכן מכיל יוצרים. למשל הנקודה <math>P=(0,2)</math> היא יוצר. אפשר לראות שאם מחברים את הנקודה <math>P</math> בעצמה 29 פעמים מתקבלות כל נקודות העקום לא בהכרח לפי הסדר, עד שמגיעים לנקודת האין סוף, כלומר <math>1P=(0,2), 2P=(13,12),3P=(11,9),...,29P=\mathcal{O}</math>.

דוגמה לחיבור שתי נקודות. אם נבחר את הנקודות <math>P=(4,7)</math> ו-<math>Q=(13,11)</math> החיבור <math>P+Q=(x_3,y_3)</math> מבוצע כך:

תחילה <math>x_3=\left(\frac{11-7}{13-4}\right)^2-4-13=3^2-4-13=-8\equiv 15\text{ (mod }23)</math>,

ואז <math>y_3=3(4-15)-7=-40\equiv 6\text{ (mod }23)</math>.

לכן התוצאה היא <math>P+Q=(15,6)</math>.

כדי להכפיל את הנקודה <math>P=(4,7)</math> בשתים, <math>2P=P+P=(x_3,y_3)</math> מחשבים כדלהלן:

תחילה <math>x_3=\left(\frac{3(4^2)+1}{14}\right)^2-8=15^2-8=217\equiv 10\text{ (mod }23)</math>,

ואז <math>y_3=15(4-10)-7=-97\equiv 18\text{ (mod }23)</math>.

ולכן <math>2P=(10,18)</math>.

===כפל סקלרי===
להבדיל מכפל רגיל מכנים פעולת כפל נקודות בעקום בשם כפל סקלרי (Scalar Multiplication). הכפלה של נקודה <math>\ \mbox{P}</math> בשלם <math>\ k</math> כלשהו היא בעצם פעולת חיבור חוזר <math>\ P+P+\cdots+P</math> בסך הכול <math>k</math> פעמים. פעולה זו ניתן לבצע על ידי אלגוריתם רקורסיבי המנצל את הייצוג הבינארי של <math>\ k</math> כדי לבצע פעולות חוזרות של חיבור וכפל המתוארים לעיל. קיימות שיטות רבות לביצוע כפל נקודה בעקום אליפטי. דוגמה אחת נקראת "שיטה בינארית מימין לשמאל" והיא מתבצעת כדלהלן:

:קלט: שלם <math>k</math> באורך <math>t</math> סיביות (בייצוג בינארי <math>k_t,...,k_2,k_1</math>), הנקודה <math>P</math>.
:פלט: הנקודה <math>Q=kP</math>.
::1. <math>Q=\mathcal{O}</math>
::2. מ-<math>1</math> עד <math>t</math> בצע:
:::אם <math>k_i=1</math> בצע <math>Q\leftarrow Q+P</math>
:::<math>P\leftarrow 2P</math>
::3. החזר את <math>Q</math>

בשיטה זו זמן החישוב תלוי ב-<math>\ k</math> ועל-כן בתנאים מסוימים עלול לחשוף את המערכת להתקפות ערוץ צדדי. קיימות שיטות מתקדמות ויעילות יותר לביצוע כפל סקלרי כמו שיטת חלון (sliding window) או שיטת מונטגומרי. ההתמודדות עם התקפות ערוץ צדדי תלויות מאוד באופן היישום ובסביבה בה האלגוריתם מיושם.

==עקום אליפטי בקריפטוגרפיה==
חשיבות עקום אליפטי בתורת ההצפנה היא בעובדה שהוא מועמד טוב לפונקציה חד-כיוונית שהכרחית בכל הצפנה א-סימטרית. לדוגמה אם נתונה הנקודה <math>P</math> ושלם כלשהו <math>k</math>, מצד אחד חישוב <math>kP</math> (באמצעות אלגוריתם רקורסיבי כמו זה המתואר לעיל) קל לביצוע במחשב, לעומת זאת, בהינתן הנקודה <math>Q=kP</math> מאוד קשה לגלות את <math>k</math>. זוהי בעיה מתמטית קשה הנקראת בעיית הלוגריתם הבדיד בעקום אליפטי. לסדר העקום (מספר הנקודות בעקום) חשיבות רבה, בפרט על העקום להכיל תת-חבורה מסדר ראשוני גדול.

קיימים בעיקר שלושה פרימיטיבים קריפטוגרפיים מבוססי עקום אליפטי; הצפנה אסימטרית, חתימה דיגיטלית ופרוטוקול שיתוף מפתח, שלושתם מבוססים על גרסת העקום האליפטי של בעיית הלוגריתם הבדיד, בעיית דיפי-הלמן ובעיית הכרעת דיפי-הלמן, הנגזרות ממנה. בעיות המוגדרות קשות חישובית, אם כי לא ידועה הוכחה מתמטית לכך. בחבורת אוילר של שדה סופי קיימים אלגוריתמים תת-מעריכיים לפתרון הבעיות המנויות, אך האלגוריתם היעיל ביותר (הידוע) לפתרון בעיות (במחשב קלאסי) אלו עבור עקומים אליפטיים הוא בעל זמן ריצה מעריכי. עקב כך, מפתחות ההצפנה בעקום אליפטי קטנים משמעותית ביחס למפתחות הצפנה בצפנים המבוססים על שדות סופיים, כמו צופן אל-גמאל או צופן RSA. יש לציין שקיים אלגוריתם קוונטי לפתרון הבעיות הללו בעזרת מחשב קוונטי ביעילות, הן עבור חבורת אוילר והן עבור עקום אליפטי. לכן כאשר מחשב קוונטי לשימוש כללי בקנה מידה גדול יהיה מעשי הצפנה המבוססת על עקום אליפטי לא תהיה בטוחה יותר לשימוש.

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

====בעיית הלוגריתם הבדיד בעקום אליפטי בקיצור ECDLP====
:בהינתן עקום אליפטי <math>E</math> המוגדר מעל שדה סופי <math>\mathbb{F}_q</math>,
:הנקודה <math>P\in E(\mathbb{F}_q)</math> מסדר <math>n</math>, הנקודה <math>Q\in\left \langle P\right \rangle</math>,
:מצא שלם <math>k\in [0,n-1]</math> כך שמתקיים <math>Q=kP</math>.

השלם <math>k</math> נקרא הלוגריתם הבדיד (דיסקרטי) של <math>Q</math> בבסיס <math>P</math> ואפשר לסמנו בקיצור <math>k=\text{log}_PQ</math>. הסימן <math>\left \langle P\right \rangle</math> מייצג את החבורה הציקלית <math>\{\mathcal{O},P,2P,3P,...,(n-1)P\}</math> שהיא אוסף הנקודות שהן כפולות של <math>P</math> יחד עם הנקודה באין סוף. שים לב שתמיד מתקיים <math>nP=\mathcal{O}</math>.

====בעיית דיפי-הלמן בעקום אליפטי בקיצור ECDHP====
בעיית דיפי-הלמן בעקום אליפטי המקבילה לבעיית דיפי-הלמן המפורסמת היא בעיה חישובית המוגדרת כך:
:בהינתן עקום אליפטי <math>E</math> המוגדר מעל שדה סופי <math>\mathbb{F}_q</math>,
:הנקודה <math>P\in E(\mathbb{F}_q)</math> מסדר <math>n</math> והנקודות <math>A=aP, B=bP\in \left \langle P\right \rangle</math>,
:מצא את הנקודה <math>C=abP</math>.

כמובן שאם ניתן לפתור ביעילות את בעיית ECDLP יהיה קל לפתור את ECDHP, ההפך לא הוכח למעט מקרים פרטיים אחדים. באופן כללי לא ידוע אם הבעיות שקולות.

====בעיית הכרעת דיפי-הלמן בקיצור ECDDHP====
:בהינתן עקום אליפטי <math>E</math> מעל <math>\mathbb{F}_q</math>,
:הנקודה <math>P\in E(\mathbb{F}_q)</math> מסדר <math>n</math>, הנקודות <math>A=aP, B=bP\in \left \langle P\right \rangle</math> וכן <math>C=cP\in \left \langle P\right \rangle</math>
:הבעיה היא להכריע האם <math>C=abP </math> או האם <math>c\equiv ab \ (\text{mod } n)</math>.

שתי השאלות הללו שקולות. כמובן שאם ניתן לפתור את ECDHP יהיה קל לפתור את ECDDHP. שופ הוכיח שקיים חסם תחתון שהוא <math>\sqrt{n}</math> עבור בעיית ההכרעת דיפי-הלמן בעקום אליפטי, <math>n</math> הוא הסדר (מספר הנקודות).

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

====דוגמה ללוגריתם בדיד בעקום אליפטי====
אם נתון העקום: <math>E:Y^2=X^3+8X+7</math> מעל <math>\mathbb{F}_{73}</math>, הנקודות <math>P=(32,53)</math> ו-<math>Q=(39,17)</math> הן בעקום <math>E(\mathbb{F}_{73})</math> ומפני שהעקום מכיל רק 41 נקודות קל לגלות באופן ישיר שהלוגריתם הבדיד הוא:
:<math>Q=11\cdot P</math> לכן <math>\log_P(Q)=11</math>.
באופן דומה <math>R=(35,47)\in E(\mathbb{F}_{73})</math> וכן <math>S=(58,4)\in E(\mathbb{F}_{73})</math>. אחרי חישוב קל אפשר לראות שהם מקיימים <math>R=37P</math> וכן <math>S=28P</math> לכן:
:<math>\log_P(R)=37</math> וכן <math>\log_P(S)=28</math>.
אף על פי שלפי הנוסחה לעיל <math>\#E(\mathbb{F}_{73})=82</math> היות ש-<math>41P=\mathcal{O}</math> למעשה סדר העקום הוא <math>82/2</math>. כך שרק 41 מהנקודות בעקום זה הן כפולות של <math>P</math>.

===בחירת פרמטרים===
כדי להשתמש בעקום אליפטי לצורך פרוטוקול קריפטוגרפי יש לשים לב לכמה היבטים חשובים כדי למנוע חולשות שעלולות להוביל לנקודות תורפה ולשבירת המערכת. הפרמטרים הציבוריים של העקום נקראים "פרמטרי תחום" (Domain Parameters) שכאמור פומביים ומשותפים לכל המשתמשים במערכת אך יש לוודא את תקינותם. תחילה בוחרים "עקום מתאים" <math>E</math> המוגדר מעל שדה סופי <math>\mathbb{F}_q</math> עם מציין <math>p</math> וכן בוחרים נקודת בסיס <math>P\in E(\mathbb{F}_q)</math>. כאשר ההגדרה "עקום מתאים" מתייחסת לכמה פרמטרים חיוניים כדלהלן; כדי למנוע התקפות המסתמכות על פתרון בעיית הלוגריתם הבדיד בעקום אליפטי (ECDLP) עם אלגוריתם רו של פולרד או פוליג-הלמן, חובה שלסדר העקום או מספר נקודות העקום המסומן ב-<math>\#E(\mathbb{F}_q)</math> יהיה גורם ראשוני <math>n</math> גדול דיו (למשל <math>n > 2^{160}</math>), ש-<math>n\approx q</math> כך שמספר הנקודות בעקום יהיה "כמעט ראשוני" וכן ש-<math>n>4\sqrt{q}</math>. לפי משפט הסה בעקום אליפטי, מספר הנקודות של עקום אליפטי חסום על ידי
:<math>(\sqrt{q}-1)^2 \ \le \ \#E(\mathbb{F}_q) \ \le \ (\sqrt{q}+1)^2</math>
מזה נובע ש-<math>n^2</math> אינו מחלק של <math>\#E(\mathbb{F}_q)</math> ולכן לעקום זה קיימת תת-חבורה מסדר <math>n</math>. ממשפט זה נובע גם שקיים שלם יחיד <math>h</math> הנקרא cofactor המקיים
:<math>q+1-2\sqrt{q} \ \le \ nh \ \le \ q+1+2\sqrt{q}</math>
במילים אחרות <math>\textstyle h=\left \lfloor (\sqrt{q}+1)^2/n\right \rfloor</math> ולכן מספר הנקודות של העקום הוא <math>hn</math>. וכדי למנוע התקפת תת-חבורה מסדר קטן המנצלת את סדר החבורה יש צורך שהנקודה <math>P</math> תהיה מסדר <math>n</math>. וכדי למנוע התקפות המנצלות רדוקציה מעקום אליפטי לשדה סופי (מורחב) יש צורך שהעקום לא יהיה סופר-סינגולרי, כלומר לוודא ש-<math>n</math> אינו מחלק של <math>q^k-1</math> עבור כל <math>1\le k\le C</math> כאשר <math>C</math> גדול מספיק כך שמציאת לוגריתם דיסרקטי בשדה <math>\mathbb{F}_{q^C}</math> יהיה קשה (למשל <math>C=20</math>) וכן רצוי למנוע התקפה אחרת נגד "עקום אנומלי" שהוא עקום אליפטי שבו מספר הנקודות הוא בדיוק <math>q</math> (שהוא מספר ראשוני), לכן רצוי שסדר העקום לא יהיה <math>q</math>. באופן כללי כדי למנוע התקפות אילו ואחרות (שמנצלות חולשות הנובעות מתכונות מיוחדות של העקום) האסטרטגיה המומלצת היא לבחור את העקום באופן אקראי בתנאי כמובן של-<math>\#E(\mathbb{F}_q)</math> יש גורם ראשוני גדול. הסבירות שעקום שנבחר כך יהיה פגיע לאחת ההתקפות הללו אינה גדולה. וכן חשוב לבחור את העקום באופן כזה שיהיה קל לוודא שהוא אכן עומד בתנאים המצוינים. אחת הדרכים היא אסטרטגיה דומה לזו שננקטה על ידי NIST בבחירת הפרמטרים עבור DSA בתקן FIPS 186 - קרי לעשות שימוש בפונקציית גיבוב כמו SHA-2 כגרעין התחלתי ממנו מפיקים את הפרמטרים האמורים, כמתואר בתקן ANSI X9.62. ואז יש כמובן לשמור גם את הגרעין ההתחלתי כחלק בלתי נפרד מסט הפרמטרים, כך שהמקבל יוכל לוודא באמצעותו שהפרמטרים תקינים ולא נבחרו באופן מעורר חשד.

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

ב-2013 התגלה כחלק מההדלפות של סנודן שה-NSA שתלו דלת אחורית באלגוריתם Dual_EC_DRBG שהיה חלק מתקן של NIST למחולל פסאודו אקראי קריפטוגרפי המבוסס על עקום אליפטי. מלבד זאת מומחים הביעו חשש בנוגע לאחדים מן הקבועים של NIST ש-NSA התערב בבחירתם. בשל כך נוצרה דרישה לעקומים אליפטיים תיקניים שאינם נמנים עם הרשימה של NIST. ב-2005 פרסם דניאל ברנשטיין את העקום Curve25519 המציע ביטחון ברמה של 128 סיביות והוא נמצא בשימוש נרחב כיום בין היתר על ידי OpenSSL וכן וואטסאפ.

====פרמטרי התחום====
פרמטרי התחום (domain parameters) של מערכת הצפנה בעקום אליפטי כוללים עקום אליפטי מתאים <math>E</math> המוגדר מעל שדה סופי <math>\mathbb{F}_q</math> עם מציין <math>p</math> ונקודת בסיס <math>G\in E(\mathbb{F}_q)</math> בנוסף למספר ערכים חשובים המהווים חלק בלתי נפרד מהמערכת. פרמטרי התחום יכולים להיות משותפים לקבוצת משתמשים או ספציפיים למשתמש יחיד. בחירת פרמטרים נכונה היא חלק קריטי בביטחון מערכת הצפנה כזו ולכן התקן מפרט צעדים מומלצים כיצד לייצר באופן אקראי או לבחור בעקום אליפטי יחד עם אוסף הפרמטרים באופן בטוח לשימוש קריפטוגרפי וכיצד לוודא שאכן עקום אליפטי אכן נוצר באופן שעונה על כל הדרישות האמורות. פרמטרי התחום של עקום אליפטי לצורך קריפטוגרפי הם:
*<math>q</math> הסדר של השדה <math>\mathbb{F}</math>, צריך להיות ראשוני או חזקה של 2 (דהיינו <math>q=p</math> ראשוני או <math>q=2^m</math>). במקרה הראשון קואורדינטות הנקודות הן שלמים חיוביים המהווים אלמנטים בשדה <math>\mathbb{F}_p</math> ואילו במקרה השני הן פולינומים ממעלה <math>m</math> מעל השדה המורחב <math>\mathbb{F}_{2^m}</math> כאשר המקדמים בינאריים.
*גרעין התחלתי (seed) אופציונלי במקרה שהעקום האליפטי נוצר באופן אקראי ולא נבחר מתוך התקן. הגרעין ההתחלתי משמש לבדיקה ואימות העקום.
*שני אלמנטים <math>a</math> ו-<math>b</math> מהשדה <math>\mathbb{F}_q</math> המגדירים את נוסחת העקום האליפטי (כגון <math>y^2=x^3+ax+b</math> או <math>y^2+xy=x^3+ax^2+b</math> במקרה של מציין <math>p=2</math>). את האלמנטים הללו בוחרים על ידי פונקציית גיבוב יחד עם גרעין התחלתי (seed) אקראי כלשהו (אותו שומרים לצורך אימות עתידי).
*שני אלמנטים (קואורדינטות) <math>x_P, y_P</math> המייצגים את הנקודה <math>P</math> מסדר ראשוני גבוה.
*הסדר <math>n</math> של הנקודה <math>P</math> צריך להתחלק במספר ראשוני גדול. כאשר <math>n>2^{160}</math> וכן <math>n>4\sqrt{q}</math>.
*<math>h</math> שנקרא גורם משלים (cofactor) כך שמתקיים <math>h=\#E(\mathbb{F}_q)/n</math>.

חשוב לוודא תקפות הפרמטרים לפני שמשתמשים בהם, כדי לוודא תקינותם יש לפעול כדלהלן:
*לוודא ש-<math>q</math> ראשוני או חזקה של ראשוני.

*לוודא שהאלמנטים <math>a,b, x_P, y_P</math> כולם אלמנטים בשדה <math>\mathbb{F}_q</math> ובפורמט הנכון (אפשר להיעזר בגרעין ההתחלתי שמסופק על ידי מי שייצר את העקום כדי לוודא שהוא אכן נוצר באקראי באמצעות פונקציית גיבוב).
*לוודא שהאלמנטים <math>a,b</math> מגדירים עקום אליפטי לא סינגולרי, כלומר שמתקיים <math>4a^3+27b^2\ne 0</math> (וכן ש-<math>b\ne 0</math> במקרה של עקום עם מציין <math>p=2</math>).
*לוודא שהנקודה <math>P</math> היא בעקום לפי הנוסחה האמורה.
*לוודא ש-<math>n>4\sqrt{q}</math>, ש-<math>n</math> ראשוני וכן גדול מספיק (למשל <math>n>2^{160}</math>).
*לוודא שמתקיים <math>nP=\mathcal{O}</math>.
*לוודא שהסדר <math>N=\#E(\mathbb{F}_q)</math> (מספר נקודות העקום) מתחלק במספר ראשוני <math>n>2^{160}</math>.
*לוודא ש-<math>h=\left \lfloor (\sqrt{q}+1)^2/n\right \rfloor</math>.
*לוודא ש-<math>n</math> אינו מחלק של <math>q^k-1</math> עבור כל <math>1\le k\le 20</math> וכן <math>n\ne q</math>.

בתקן SEC-1 של GSEC (חברת Certicom הקנדית) ובתקן של NIST, נקבע הבסיס האריתמטי או ייצוג האלמנטים לפי סוג השדה, בשדה ראשוני <math>\mathbb{F}_q</math> האלמנטים הם השלמים מודולו <math>q</math> ונקודה בעקום מיוצגת על ידי קואורדינטות שלמות <math>x,y\in\mathbb{F}_q</math>. בשדה עם מציין 2 האלמנטים מיוצגים בבסיס פולינומי כאשר השדה הוא <math>\mathbb{F}_{2^m}</math> וקואורדינטות הנקודה הן פולינומים ממעלה <math>m-1</math>.

====סדר העקום האליפטי====
מספר הנקודות בעקום האליפטי חשוב מאוד לביטחון מערכת ECC כאמור, כדי למנוע התקפות קריפטוגרפיות מסוימות שמנצלות סדר חבורה שמכיל גורמים קטנים. ספירת נקודות העקום אפשרית בזמן פולינומי עם מספר אלגוריתמים ידועים ביניהם אלגוריתם של שוף (schoof) שהורחב ושופר לאחר מכן על ידי קובליץ אלקיס ואטקין ונקרא אלגוריתם SEA. עם אלגוריתם SEA אפשר לספור את נקודות עקום אליפטי מעל שדה סופי מסדר 200 בתוך מספר שעות. אלגוריתם SATOH פותח במיוחד לספירת נקודות עקום אליפטי מעל שדה בינארי מורחב, למשל אם <math> m=200</math> אפשר לספור את נקודות העקום עם אלגוריתם SATOH בתוך מספר שניות.

====הכנת עקום אליפטי באופן אקראי====
הכנת עקום אליפטי באופן אקראי נעשית לפי התקן עם פונקציית גיבוב קריפטוגרפית כמו SHA-2 כאשר הגרעין ההתחלתי משמש כהוכחה שהעקום אכן נוצר באופן אקראי ולא נוצר במכוון כך שיכיל חולשות או דלתות סתר. הרעיון הכללי הוא שמכינים עם פונקציית הגיבוב מתוך גרעין התחלתי seed מחרוזת סיביות אקראית באורך הרצוי <math>H=\text{SHA2}(seed)</math>. מייצגים את המחרוזת <math>H</math> כמספר בינארי שלם <math>r</math> ומוודים שלא מתקיים <math>4r+27\equiv 0\text{ (mod }p)</math> וכן בוחרים שני שלמים אקראיים <math>a,b\in\mathbb{F}_p</math> כך שמתקיים <math>r\cdot b^2\equiv a^3\text{ mod } p</math>. הגרעין ההתחלתי צריך להישמר יחד עם העקום והוא משמש כהוכחה. הוא מייצר באותה דרך מחרוזת סיביות <math>r'</math> ומוודא שמתקבל <math>r'\cdot b^2\equiv a^3</math> אם התנאי לא מתקיים זו הוכחה שהעקום לא נבחר באקראי.

====מפתח פרטי ומפתח ציבורי====
בהינתן הפרמטרים הציבוריים <math>(q, a, b, P, n, h)</math> המפתח הפרטי הוא שלם <math>d</math> אקראי בטווח <math>[1, n-1]</math> הנשמר בסוד והמפתח הציבורי המתאים הוא <math>Q=dP</math> שהוא כפל סקלרי של הנקודה <math>P</math> עם המפתח הפרטי <math>d</math>. בדרך כלל המפתחות של כל משתמש צריכים להיות מאומתים ומשויכים אליו בדרך כלשהי. בדרך קריפטוגרפית מאמתים מפתח באמצעות חתימה דיגיטלית או תעודה (certificate) שמונפקת על ידי רשות מאשרת (CA). וכן בדרך כלל קיימת הפרדה בין המפתחות הקבועים המיועדים לטווח ארוך לבין מפתחות ארעיים (ephemeral keys) הנוצרים לצורך התקשרות ספציפית. יש צורך תמיד לאמת תקפות המפתח הציבורי, לוודא שמקיים את התנאים המפורטים לעיל; ש-<math>Q</math> הוא נקודה בעקום שאינה <math>\mathcal{O}</math> וכן שהקואורדינטות <math>x,y</math> שלה הם אלמנטים בשדה <math>\mathbb{F}_q</math> בטווח המתאים וכן שמתקיים <math>nQ=\mathcal{O}</math>. בפועל משתדלים להימנע מהבדיקה האחרונה כיוון שהיא פעולה מכבידה במונחי מחשוב, אפשר לחסוך בדיקה זו על ידי שימוש בפרוטוקול שיתוף מפתח עם אימות כמו MQV שבו הבדיקה עקיפה ונעשית כחלק ממהלכי הפרוטוקול.

==הצפנה עם עקום אליפטי==
ניתן ליישם את צופן אל-גמאל בעקום אליפטי כדלהלן; בהינתן המפתח הציבורי של בוב הנקודה <math>Q</math>, אם אליס מעוניינת להצפין את המסר <math>m</math> עליה תחילה להמירו לנקודה <math>M</math> בעקום ואותה להצפין על ידי חיבור עם <math>kQ</math>, כאשר <math>k</math> שלם אקראי "טרי" חד-פעמי שנבחר על ידה כדי להצפין את <math>M</math> ובנוסף היא צריכה להצפין ולשלוח את המפתח <math>k</math>. ביתר פירוט, אליס משדרת לבוב בערוץ הפתוח שני ערכים: <math>C_1=kP</math> שמכיל את המפתח המוצפן וכן <math>C_2=M+kQ</math> שמכיל את המסר המוצפן. כאשר בוב מקבל את הערכים הללו מאליס הוא מבצע את הפעולות בסדר הפוך, הוא מפענח את המפתח המוצפן ואז מחסיר את התוצאה מהטקסט המוצפן כדי לקבל את הנקודה <math>M</math> וממנה לחלץ את המסר <math>m</math>. זה עובד היות שמתקיים
:<math>dC_1=d(kP)=k(dP)=kQ</math>
כאשר <math>d</math> הוא המפתח הפרטי של בוב המקיים <math>Q=dP</math>. לכן היות ש-<math>M=C_2-kQ</math> בוב יכול להחליפו בביטוי <math>M=C_2-dC_1</math> ולקבל את <math>M</math>. המאזינה איב שמעוניינת לגלות את <math>M</math> צריכה לחשב תחילה את <math>kQ</math>, חילוץ <math>kQ</math> מתוך <math>Q</math> ומתוך <math>C_1</math> היא בדיוק בעיית דיפי-הלמן. למען הפשטות הגרסה המתוארת חסרה מספר מרכיבים חשובים כמו אימות ובדיקת תקפות. להלן תיאור פרוטוקול הצפנה היברידי שנקרא ECIES (קיצור של Elliptic Curve Integrated Encryption Scheme) שהוצע על ידי בלייר ורוגווי, המשלב הצפנה אסימטרית המבוססת על צופן אל-גמאל והצפנה סימטרית עם אימות. הוכנס לתקן ANSI X9.63 וכן ISO/IEC 15946-3 וכן IEEE P1363. בפרוטוקול זה מנצלים את פרוטוקול שיתוף הסוד הבסיסי של דיפי והלמן כדי לשתף שני מפתחות סודיים <math>k_1,k_2</math> כאשר <math>k_1</math> משמש להצפנת המסר ו-<math>k_2</math> לאימות התוצאה להגנה מפני התקפת מוצפן-נבחר. לצורך הפרוטוקול מוגדרות שלוש פונקציות בסיסיות; KDF - פונקציית הכנת מפתח שהיא תוצאת פונקציית גיבוב של גרעין כלשהו <math>S</math> ומונה כלשהו שמשתנה בכל קריאה, המשורשרים יחד. E - פונקציית הצפנה סימטרית כמו AES וכן MAC - פונקציית אימות כמו HMAC.

====הצפנה====
נתונים פרמטרי התחום <math>(q, S, a, b, P, n, h)</math>, המפתח הציבורי <math>Q</math> והמסר <math>m</math>.

#בוחרים שלם אקראי <math>k</math> בטווח <math>[1, n-1]</math>.
#מחשבים את <math>R=kP</math> וכן <math>Z=hkQ</math> (יש לוודא ש-<math>Z\ne \infty</math>).
#מציבים <math>(k_1, k_2)\leftarrow \text{KDF}(x_Z\ \| \ R)</math> כאשר <math>x_Z</math> הוא הקואורדינטה <math>x</math> של הנקודה <math>Z</math> והסימן <math>\|</math> מייצג שרשור (concatenation).
#מחשבים את <math>C=E_{k_1}(m)</math> וכן <math>\tau=\text{MAC}_{k_2}(C)</math>.
התוצאה היא השלישייה: הטקסט המוצפן <math>C</math>, תג האימות <math>\tau</math> והאלמנט <math>R</math>.

====פענוח====
נתונים פרמטרי התחום <math>(q, S, a, b, P, n, h)</math>, המפתח הפרטי <math>d</math>, האלמנט <math>R</math> יחד עם הטקסט המוצפן <math>C</math> ותג האימות <math>\tau</math> (כמובן שיש לוודא את תקפות כל הפרמטרים לפי התקן).

#מחשבים את <math>Z=hdR</math> אם מתקבל <math>\infty</math> מחזירים INVALID.
#מציבים <math>(k_1,k_2)\leftarrow \text{KDF}(x_Z \ \| \ R)</math>.
#מחשבים את <math>\tau'=\text{MAC}_{k_2}(C)</math> אם <math>\tau'\ne \tau</math> מחזירים INVALID.
#מחשבים את <math>m=E_{k_1}^{-1}(C)</math>.
הטקסט המקורי הוא <math>m</math>. אפשר לראות שאם הטקסט המוצפן <math>(R,C,\tau)</math> נוצר על ידי המשתמש הלגיטימי כאשר הצפין את <math>m</math> הרי שמתקיים
:<math>hdR=hd(kP)=hk(dP)=hkQ</math>
בהצפנה שורות 1 ו-2 הן דיפי-הלמן, הכפל ב-<math>h</math> נועד להבטיח באופן עקיף שהתוצאה בטווח המותר. פעולה 3 באלגוריתם ההצפנה ופעולה 2 באלגוריתם הפענוח מניבות תוצאה זהה, מכאן המקבל יכול לייצר את זוג המפתחות <math>(k_1,k_2)</math> שחישב השולח באמצעות אותה פונקציית KDF ולשחזר את הטקסט המוצפן. אך יש להישמר מהתקפת ערוץ צדדי כך שלתוקף לא תהיה דרך לדעת באיזה שלב של האלגוריתם הוחזרה הודעת שגיאה אם ארעה.

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

שדה בינארי הוא שדה סופי בעל מאפיין 2, כאשר מספר האיברים בו הוא תמיד חזקה של 2. לכן ניתן ליצג כל אלמנט בשדה כמחרוזת של <math>\ m</math> סיביות. מקובל לסמנו <math>\ \mathbb{F}_{2^m}</math>. קיים רק שדה אחד בגודל <math>\ 2^m</math> עבור כל שלם <math>\ m</math> נתון.

משוואת העקום האליפטי מעל שדה זה היא: <math>y^2+xy=x^3+ax^2+b</math> כאשר <math>a,b\in\mathbb{F}_{2^m}</math> וכן <math>b\ne 0</math>. הקבוצה <math>E(\mathbb{F}_{2^m})</math> כוללת את כל הנקודות שהקואורדינטות שלהן <math>x</math> ו-<math>y</math> הן אלמנטים בשדה הבינארי המורחב אשר מקיימות את משוואת העקום, יחד עם הנקודה באין סוף <math>\mathcal{O}</math>. יחד עם פעולות החיבור והכפל מתקבלת חבורה ציקלית סופית מסדר <math>2^m</math> בקירוב.

כללי החיבור והכפל בעקום אליפטי מעל שדה בינארי מורחב שונות במעט: לחיבור הנקודות <math>P=(x_1,y_1)</math> ו-<math>Q=(x_2,y_2)</math> כאשר <math>P\ne Q</math> מבצעים:
:<math>x_3=\left(\frac{y_1+y_2}{x_1+x_2}\right)^2+\frac{y_1+y_2}{x_1+x_2}+x_1+x_2+a </math>
:<math>y_3=\left(\frac{y_1+y_2}{x_1+x_2}\right)+(x_1+x_3)+x_3+y_1</math>
כפל נקודה <math>2P=(x_3,y_3)</math> כאשר <math>P\ne -P</math> מתבצע על ידי:
:<math>x_3=x_1^2+\frac{b}{x_1^2}, \ \ y_3=x_1^2+\left(x_1+\frac{y_1}{x_1}\right)x_3+x_3</math>
למטרות הצפנה, מקובל לבחור <math>\ m</math> ראשוני גדול, משום שאז אין לשדה תת שדות. את גודלו של <math>\ m</math> יש לבחור בהתאם לדרישות האבטחה מחד, ולביצועים הרצויים מאידך. לשדות בינאריים יתרון ברור כשמדובר בחומרה ותוכנה, משום שפעולת החיבור בשדה מבוצעת על ידי פעולת ה-XOR, שהיא פעולה יסודית ומהירה במחשב.

דוגמה. נתון השדה הבינארי <math>\ \mathbb{F}_{2^4}</math> בן 16 איברים, הניתן להצגה כהרחבה של השדה בן שני האיברים <math>\ \mathbb{F}_2=\{0,1\}</math>, כחוג המנה <math>\ \mathbb{F}_2[x]/<x^4+x+1></math>. באופן הזה, כל איבר בשדה הוא מהצורה <math>\ s=a_0+a_1x+a_2x^2+a_3x^3</math> כאשר <math>\ a_0,\dots,a_3\in \mathbb{F}_2</math>, ובאופן חסכוני אפשר להציג איבר כזה כמחרוזת סיביות, <math>\ s=(a_3a_2a_1a_0)</math>.

החבורה הכפלית של השדה היא חבורה ציקלית, הנוצרת (למשל) על ידי החזקות של היוצר <math>\ g=(0010)</math> כדלהלן:
{| border="0"
|+
|-
|| <math>\ g^0=(0001)</math>
|| <math>\ g^1=(0010)</math>
|| <math>\ g^2=(0100)</math>
|| <math>\ g^3=(1000)</math>
|| <math>\ g^4=(0011)</math>
|| <math>\ g^5=(0110)</math>
|-
|| <math>\ g^6=(1100)</math>
|| <math>\ g^7=(1011)</math>
|| <math>\ g^8=(0101)</math>
|| <math>\ g^9=(1010)</math>
|| <math>\ g^{10}=(0111)</math>
|| <math>\ g^{11}=(1110)</math>
|-
|| <math>\ g^{12}=(1111)</math>
|| <math>\ g^{13}=(1101)</math>
|| <math>\ g^{14}=(1001)</math>
|}

אם נבחר העקום האליפטי הבא:
<math>\ y^2+xy=x^3+(1000)x^2+(1001) \,\,\,\boldsymbol{=}\,\,\, y^2+xy=x^3+g^3x^2+g^{14}</math>

חישוב <math>\ \mbox{R = P + Q =} (g^1,g^{12}) + (g^6,g^6)</math>, מתבצע לפי כללי האריתמטיקה דלעיל:
: <math>\ \lambda = (g^{12} + g^6) \cdot (g^1 + g^6)^{-1} = g^8</math>
: <math>\ x_R = (g^8)^2 + g^8 + g^1 + g^6 + g^3 = g^0</math>
: <math>\ y_R = g^8 \cdot (g^1+g^0) + g^0 + g^{12} = g^0</math>

ובייצוג בינארי:
<math>\ (0010, 1111) + (1100, 1100) = (0001, 0001)</math>

===קואורדינטות פרויקטיביות===
אפשר לראות שחיבור נקודות בעקום אליפטי דורש בנוסף לכפל וחיבור פעולת חישוב הופכי כפלי מודולרי: בהינתן <math>a</math> לחשב את <math>x=a^{-1}</math> המקיים: <math>a \cdot x \equiv 1 \ (\mbox{mod }p)</math>. בדרך כלל חישוב הופכי כפלי היא פעולה יקרה במונחי חישוב ומשתדלים להימנע ממנה כשאפשר. קיימת דרך יישום ל-ECC הנקראת מערכת פרויקטיבית בשיטת מונטגומרי המאפשרת חיבור נקודות בלי השימוש בהיפוך. בעקום מסוג מונטגומרי מהצורה <math>By^2=x^3+Ax^2+x</math> הנקודה <math>P=(x,y)</math> מיוצגת על ידי <math>P=(X:Z)</math> ללא הקואורדינטה <math>y</math> שלצורך קריפטוגרפי אינה נחוצה. כפל נקודות בשיטה זו שנקראת גם סולם מונטגומרי יכול להתבצע על ידי הנוסחאות הבאות:
{| dir="ltr"
|-
|
:<math>X_{2n}=(X_n-Z_n)^2(X_n + Z_n)^2</math>,
:<math>Z_{2n}=((X_n+Z_n)^2-(X_n-Z_n)^2)\left((X_n + Z_n)^2+\frac{A-2}{4}((X_n+Z_n)^2-(X_n-Z_n)^2)\right)</math>
:<math>X_{2n+1}=((X_n-Z_n)(X_{n+1} + Z_{n+1}) + (X_n + Z_n)(X_{n+1} - Z_{n+1}))2Z_1,</math>
:<math>Z_{2n+1}=((X_n-Z_n)(X_{n+1} + Z_{n+1}) - (X_n + Z_n)(X_{n+1} - Z_{n+1}))2X_1</math>
|}
יוצא שהכפל <math>nX</math> התבצע תוך 11 פעולות כפל באלמנטים מסדר <math>n</math> ללא חילוק או חישוב הופכי כפלי כלל.

===צמצום מודולרי===
ניתן לייעל באופן משמעותי את פעולת הצמצום המודולרי הדרושה בכפל וחיבור בעקום אליפטי אם הראשוני <math>\ p</math> הוא מספר מרסן (מספר מהצורה <math>\ 2^s-1</math>) לדוגמה <math>\ 2^{251}-1</math>. עקומים עם מספר ראשוני מסוג זה מומלצים על ידי NIST בליווי הסברים כיצד לבצע צמצום מודולרי יעיל במספרים אלו.

==ביטחון==
האלגוריתם היעיל ביותר הידוע כיום לפתרון בעיית לוגריתם בדיד בחבורות, תחשיב האינדקסים אינו ישים בעקומים אליפטיים כיוון שהוא מסתמך על מספרים חלקים ולא קיימת הגדרה מתמטית ברורה למספרים חלקים בעקום אליפטי. אלגוריתם רו של פולרד ללוגריתמים נחשב לשיטה היעילה ביותר הקיימת כיום לפתרון בעיית ECDLP וסיבוכיותה היא <math>\textstyle O(\sqrt{n})</math> בקירוב. על כן אינה יעילה (גם בגרסה המקבילית שלה) כשמדובר בשדה מסדר גדול. עבור ביטחון בסדר גודל של 128 סיביות מספיק שסדר העקום יהיה <math>\textstyle q \approx 2^{256}</math>. לשם המחשה, מערכת מפתח ציבורי דורשת מפתח בסדר גודל של כ-2048 סיביות כדי שתקרא בטוחה ברמה המקבילה ל-AES עם מפתח באורך 112 סיביות. במערכת ECC מקבילה, מפתח בגודל 224 סיביות מספק בטיחות שקולה. לפי המלצות NIST בתקן 800-131A (תחת הכותרת שינוי אלגוריתמים קריפטוגרפיים ואורך מפתחות) שפורסם ביולי 2018, עד דצמבר 2023 ההמלצה היא להשתמש עבור RSA במפתחות באורך 2048 לפחות, עבור DSA מפתחות באורך (2048,224), (2048,256) או (3072,256) ועבור ECC מפתח באורך 224 סיביות ומעלה. ב-2004 פוצח עקום ECC109 עם מפתח בגודל 109 סיביות. לשם כך נדרשו 2600 יחידות מחשב שפעלו באופן מקבילי במשך 17 חודשים. בנובמבר 2009 החלו קבוצת חוקרים בפרויקט לשבירת העקום ECC2K-130 מתוך רשימת האתגרים של חברת סרטיקום (שהפרס עליו היה 20,000$). זהו עקום קובליץ מעל השדה הבינארי בגודל 130 סיביות והוא העקום הקטן ביותר שטרם פוצח מתוך רשימת האתגרים של סרטיקום. ההערכה המקורית של חברת סרטיקום בשנת 1997 הייתה שייקח לפחות <math>2.7\times 10^9</math> ימים לשבירתו ולכן בהגדרה נאמר שהוא בלתי שביר. אולם המחקר האחרון מראה שבעקבות ההתקדמות הטכנולוגית הן ברמה חומרה והן ברמת תוכנה ההערכה הזו לא נכונה. כיום ההערכה היא שהעקום ניתן לשבירה וזה רק עניין של זמן (מספר שנים) עד שהוא יפוצח.

===התקפת ערוץ צדדי===

ההבדל המהותי בין חישוב פעולת חיבור לבין פעולת כפל של נקודות בעקום אליפטי, מהווה נקודת תורפה שיש להימנע ממנה, כיוון שמערכת המיישמת את ECC עלולה להדליף מידע פנימי כתוצאה מהפרשי הזמן במהלך ביצוע פעולות כפל וחיבור. התקפת ערוץ צדדי מנצלת מידע כזה. אפשר לחלק התקפה זו לשני סוגים עיקריים, האחת נקראת Simple Power Analysis שבה מודדים את עצמת הצריכה של המעבד (CPU) במהלך ביצוע ECADD ו-ECDBL המתוארות לעיל בפרוצדורת כפל סקלרי. בשל הבדלים אילו ניתן לחלץ מידע קריטי מהמערכת. השנייה נקראת Differential Power Analysis, התקפה המבוססת על ניתוח סטטיסטי של מספר פעולות חישוב שבוצעו, כדי לחלץ מידע מהמערכת. כאמור לעיל לאור יתרונותיה, מערכת ECC מתאימה במיוחד ליישום במתקנים ניידים על כן נגישות התוקף למערכת ויכולתו למדוד את משך זמן ביצוע פעולות החישוב של יחידת העיבוד הוא בגדר אפשרי.

הפתרון להתקפת SPA (הראשונה) הוא שינוי פרוצדורת הכפל באופן שלא תדליף מידע קריטי. קיימות מספר שיטות יעילות לביצוע פעולה זו כגון: שיטת יעקובי (Jacobi) והסה (Hesse) המשתמשת באלגוריתם אחיד לחיבור וכפל סקלרי של נקודות. באופן כזה הזמן הדרוש לביצוע פעולות אילו זהה ועל כן לא דולף מידע קריטי. שיטה זו מתאימה לעקומים מיוחדים הנקראים "עקום קובליץ". או כפל סקלרי בשיטת קורון עם חיבור מדומה (double-and-always-add), כפל סקלרי בשיטת חלון, כפל סקלרי בשיטת סולם מונטגומרי וכן שיטת מולר (Möller) העושה שימוש ב-Addition chain. כנגד התקפת DPA, הוספת אקראיות כמו אקראיות פרויקטיבית <math>\ \mbox{P}=(r^2\mbox{X},r^3\mbox{Y},r\mbox{Z})</math> עם <math>\ r</math> שלם אקראי כלשהו מספקת.

===גודל מפתח===
מאחר שמפתח למעשה מייצג נקודה בעקום, גודלו הוא למעשה שתי הקואורדינטות <math>x</math> ו-<math>y</math>. אולם ניתן להפחית בגודל המפתח על ידי דחיסת הקואורדינטה <math>y</math> כך שנדרשת רק סיבית אחת (המייצגת האם המספר חיובי או שלילי) לייצגה באופן שאפשר יהיה לשחזרה לאחר מכן. כך שאפקטיבית גודל המפתח הוא בערך כגודל הקואורדינטה <math>x</math>. היות שהקואורדינטות הם בערך כגודל הסדר של השדה (מספר האלמנטים) הרי שחוסן אלגוריתם ההצפנה תלוי למעשה בסדר. לצורך השוואה להשגת רמת בטיחות של 128 סיביות (למשל אותה רמת בטיחות המושגת עם אלגוריתם סימטרי כמו AES ומפתח בגודל 128 סיביות) הסדר של שדה במערכת ECC יכול להיות בסדר גודל של 256 סיביות, רק לשם השוואה במערכת מפתח-פומבי טיפוסית כמו RSA יש צורך במודולוס בגודל 3072 סיביות, להשגת רמת בטיחות זהה.

==תקנים וזכויות יוצרים==
על בסיס בעיית לוגריתם בדיד בעקום אליפטי (ECDLP) המתוארת לעיל, ניתן ליישם את פרוטוקול דיפי-הלמן (ECDH), חתימה דיגיטלית DSA מעל עקום אליפטי (ECDSA), אל-גמאל וכן פרימיטיבים קריפטוגרפיים אסימטריים אחרים כמו מחולל פסאודו אקראי. NSA הכריזה על חבילה קריפטוגרפית Suit B המנצלת הצפנת עקום אליפטי (ECC) כדור חדש של הצפנה. היא אמורה להחליף את הטכנולוגיה האסימטרית כ-RSA ודומיה להגנה על סודות לאומיים מסווגים ולא מסווגים של ממשלת ארצות הברית. כמו כן קיימת מערכת ECC המבוססת על תבנית ביליניארית (הנקראת גם Weil pairing) המשמשת למערכת אימות זהויות מבוססת ID (שבה זהות המשתמש מהווה חלק מהמפתח הפומבי) כמו כן חברת [http://www.secg.org Certicom] הקנדית משווקת מגוון גדול של מערכות אבטחה המבוססות על עקום אליפטי.

מסיבות של יעילות ביישומים מעשיים בדרך כלל מיישמים את ECC מעל שדה עם נקודה קבועה בעלת תכונות מסוימות שמאפשרות חישוב כפל סקלארי במהירות וביעילות. מציאת הסדר של עקום אליפטי (קרי, מספר הנקודות) אינו דבר קל, קיימים אלגוריתמים לשם כך (כמו אלגוריתם שוף). כיוון שסדר החבורה חיוני בפרוטוקולים קריפטוגרפיים נהוג לבנות עקום אליפטי באופן כזה שהסדר קל לחישוב. למעשה התקנים למערכות ECC מגדירים פרוצדורות שונות להכנת עקום אליפטי בטוח העונה על הדרישות הרצויות וכן מכילים אוסף עקומים אליפטיים מומלצים לצורך ECC. היות שמלאכת הכנת עקום אליפטי לצורך קריפטוגרפי קשה ומסובכת, קיימים מספר תקנים בינלאומיים ראויים לציון, המכסים עקומים אליפטיים קבועים שהוכנו במיוחד על ידי מומחים לשימוש כללי כחלק ממערכת הצפנת ECC תוך התחשבות ברמת הביטחון הנדרשת ויעילותה. החשובים שבהם:
{| class="wikitable"
|-
! שם התקן !! שנת הוצאה
|-
| ANSI X9.62 || 1999
|-
| IEEE P1363 || 2000
|-
| SEC 2 || 2000
|-
| NIST FIPS 186-2 || 2000
|-
| ANSI X9.63 || 2001
|-
| Brainpool || 2005
|-
| NSA Suite B || 2005
|-
| ANSSI FRP256V1 || 2011
|}

דוגמה לעקום אליפטי שאינו מומלץ כיום לשימוש הוא P-192 שנכלל בתקן FIPS 186-2 וכן ב-SEC v2 ומובא כאן להמחשה בלבד:

משוואת העקום היא <math>y^2=x^3+3</math> מעל השדה <math>\mathbb{F}_p</math> כאשר <math>p</math> הוא ראשוני באורך 192 סיביות. סדר העקום הוא <math>n</math> והפרמטרים <math>p,a,b,G,n,h</math> הם לפי הסדר:
{| class="wikitable" dir="ltr"
|-
! שם פרמטר !! ערך !! תיאור
|-
| <math>p</math> || <math>2^{192}-2^{32}-2^{12}-2^8-2^7-2^6-2^3-1</math> || align="right" | <math>\mathbb{F}_p</math> המספר הראשוני של השדה
|-
| <math>a</math> || <math>00000000 00000000 00000000 00000000 00000000 00000000</math> || align="right" | מקדם ראשון של משוואת העקום
|-
| <math>b</math> || <math>00000000 00000000 00000000 00000000 00000000 00000003</math> || align="right" | מקדם שני של משוואת העקום
|-
| <math>G</math> || <math>\text{03 DB4FF10E C057E9AE 26B07D02 80B7F434 1DA5D1B1 EAE06C7D}</math> || align="right" | נקודת הבסיס בפורמט דחוס
|-
| <math>G_x</math> || <math>\text{04 DB4FF10E C057E9AE 26B07D02 80B7F434 1DA5D1B1 EAE06C7D}</math> || align="right" | קואורדינטה <math>x</math> של נקודת הבסיס
|-
| <math>G_y</math> || <math>\text{9B2F2F6D 9C5628A7 844163D0 15BE8634 4082AA88 D95E2F9D}</math> || align="right" | קואורדינטה <math>y</math> של נקודת הבסיס
|-
| <math>n</math> || <math>\text{FFFFFFFF FFFFFFFF FFFFFFFE 26F2FC17 0F69466A 74DEFD8D}</math> || align="right" | הסדר של העקום
|-
| <math>h</math> || <math>01</math> || align="right" | פקטור משלים
|}



בשל העובדה שחלק ממערכות ECC מוגנות בפטנטים הפצתן והטמעתן התעכבה. חברת Certicom מחזיקה בכמאה וחמישים פטנטים הקשורים בהיבטים שונים של ECC. חברת אפל מחזיקה בפטנטים על יישום יעיל של ECC מעל השדה <math>\ GF(p)</math> כאשר <math>\ p</math> קרוב לחזקה של 2. ה-NSA רכשו זכויות שימוש במערכות ECC של חברת Certicom הקנדית והוסמכו לתת רישיון לכל גוף המעוניין לשלב ECC באפליקציות אבטחה בהן נעשה שימוש עבור ממשלת ארצות הברית. בעקבות החשיפות בפרשת סנודן, עלה חשש בציבור שחלק מתקני עקום אליפטי במיוחד אילו של NIST מכילים דלתות סתר שמאפשרות למי שיודע אותם לפרוץ את המערכת בקלות אם כי לא קיימות הוכחות ברורות לכך מלבד מקרה אחד. בעקבות הדלפות סנודן, פורסם בספטמבר 2013 בניו יורק טיימס שכחלק מפרויקט סודי של ה-NSA הנקרא "Bullrun" שמטרתו החדרת נקודות תורפה נסתרות בתקני הצפנה החדיר ה-NSA "דלת אחורית" במחולל הפסאודו אקראי Dual_EC_DRBG שהפך לתקן ובעקבות הפרסומים החליט NIST להפסיק לתמוך באלגוריתם והסיר אותו מהתקן. כיום NIST מנהל מדיניות פתוחה ומשתף פעולה באופן נרחב עם הקהילה האקדמית ועם גורמי תקינה בינלאומיים.

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

===תקנים חדשים===
ב-2007 גילה המתמטיקאי הרולד אדוארד משפחה חדשה של עקומים אליפטיים מהצורה <math>x^2+y^2=1+dx^2y^2</math>. מאוחר יותר פרסמו דניאל ברנשטיין וטניה לאנג שאפשר לנצל את עקומי אדוארד ווריאציות מפותלות שלהם לצורך קריפטוגרפי. האטרקטיביות של עקומים אילו היא בעובדה שחיבור נקודות בהם קל יותר. עקומי אדוארד נוטים להיות קלים יותר למימוש באופן בטוח בגלל שהם תומכים בנוסחאות חיבור שלמות שאינן כוללות מקרים חריגים שעלולים להוביל לחילוק באפס. מה שמאפשר מימוש בטוח באופן כזה שאינו מדליף מידע צדדי. כמו כן עקומים אילו מהירים ופשוטים יחסית. לכל עקומי אדוארד והגרסאות המפותלות שלהם יש פקטור משלים המתחלק בארבע, מסיבה זו עקומי NIST מסדר ראשוני אינם ניתנים לייצוג בצורה זו. מאז נוספו מספר עקומים חדשים המבוססים על עקומי אדוארד וכן עקומי מונטגומרי שהמכנה המשותף שלהם הוא ביטחון ויעילות גבוהים לפי סטנדרטים מחמירים ביותר. בטבלה הבאה נכללו מספר עקומים אליפטיים חדשים שאינם מוגנים בפטנטים ושעוצבו לאחר 2007 כאשר רמת הביטחון שלהם נמדדת לפי המודולוס הראשוני <math>p</math>, ליתר דיוק בפקטור שהוא מחצית מאורכו בסיביות. למשל אם <math>|p|\approx 256</math> סיביות ביטחון העקום הוא <math>2^{128}</math> בקירוב, שזה מקביל לביטחון של צופן AES עם מפתח באורך 128 סיביות.

{| class="wikitable"
|-
! שם העקום !! משוואת העקום !! המודולוס הראשוני <math>p</math> !! מפתחים
|- align="left"
| M-221 || <math>y^2 = x^3+117050x^2+x</math> || <math>2^{221} - 3</math> || Aranha, Barreto, Pereira, Ricardini, 2013
|- align="left"
| E-222 || <math>x^2+y^2 = 1+160102x^2y^2</math> || <math>2^{222} - 117</math> || Aranha, Barreto, Pereira, Ricardini 2013
|- align="left"
| Curve1174 || <math>x^2+y^2 = 1-1174x^2y^2</math> || <math>2^{251} - 9</math> || Bernstein, Hamburg, Krasnova, Lange 2013
|- align="left"
| Curve25519 || <math>y^2 = x^3+486662x^2+x</math> || <math>2^{255} - 9</math> || Bernstein 2007
|- align="left"
| E-382 || <math>x^2+y^2 = 1-67254x^2y^2</math> || <math>2^{382} - 105</math> || Aranha, Barreto, Pereira, Ricardini, 2013
|- align="left"
| M-383 || <math>y^2 = x^3+2065150x^2+x</math> || <math>2^{383} - 187</math> || Aranha, Barreto, Pereira, Ricardini, 2013
|- align="left"
| Curve383187 || <math>y^2 = x^3+229969x^2+x</math> || <math>2^{383} - 187</math> || Aranha, Barreto, Pereira, Ricardini, 2013
|- align="left"
| Curve41417 || <math>x^2+y^2 = 1+3617x^2y^2</math> || <math>2^{414} - 17</math> || Bernstein, Lange 2013
|- align="left"
| Ed448 || <math>x^2+y^2 = 1-39081x^2y^2</math> || <math>2^{448} - 2^{224} - 1</math> || Hamburg 2014
|- align="left"
| M-511 || <math>y^2 = x^3+530438x^2+x</math> || <math>2^{511} - 187</math> || Aranha, Barreto, Pereira, Ricardini, 2013
|- align="left"
| E-521 || <math>x^2+y^2 = 1-376014x^2y^2</math> || <math>2^{521} - 1</math> || Aranha, Barreto, Pereira, Ricardini, 2013
|}

==ראו גם==
* פרוטוקול דיפי-הלמן
* Advanced Encryption Standard
* MQV
* עקום 25519

==קישורים חיצוניים==
* "[http://www.digitalwhisper.co.il/files/Zines/0x19/DW25-1-ECC.pdf הצפנה מבוססת עקומים אליפטיים]" - מאמר בנושא, מאת ד"ר גדי אלכסנדרוביץ' אשר פורסם בגיליון ה-25 של מגזין אבטחת המידע [http://www.digitalwhisper.co.il DigitalWhisper].
* NSA, "הדור החדש של ההצפנה האסימטרית", [https://web.archive.org/web/20090117023500/http://www.nsa.gov/business/programs/elliptic_curve.shtml The Case for Elliptic Curve Cryptography]
* [http://csrc.nist.gov המכון הלאומי לסטנדרט וטכנולוגיה של ממשלת ארצות הברית] נספח לתקן הצפנה בעקומים אליפטיים: [http://csrc.nist.gov/groups/ST/toolkit/documents/dss/NISTReCur.pdf Recommended Elliptic Curves For Federal Government Use]
* [http://www.secg.org חברת Certicom הקנדית], תקן עקומים אליפטיים בהצפנה [http://www.secg.org/sec1-v2.pdf SEC 1: Elliptic Curve Cryptography], כולל סקירה תמציתית של אריתמטיקה בעקום אליפטי, אלגוריתמים ופרוטוקולים ודיון בסוגיית הבטיחות.
* [https://web.archive.org/web/20160309033943/http://certicom.com/index.php/ecc-tutorial מדריך קצר להצפנה בעקום אליפטי], באתר חברת [http://www.secg.org Certicom].

==הערות שוליים==

קטגוריה:הצפנה