İki noktadan geçen doğrunun eğimi (\(m\)) normal analitik geometrideki formülle hesaplanır. Ancak sonlu alanda bölme işlemi yoktur; bunun yerine paydanın çarpımsal tersini (Fermat'ın Küçük Teoremi ile) hesaplayıp pay ile çarparız:
Eliptik eğri üzerinde nokta toplama, iki noktadan geçen kesen doğrunun eğriyi kestiği üçüncü noktanın x-eksenine göre yansımasıyla tanımlanır. Bu geometrik işlem, cebirsel grup yapısının görsel temsilidir ve tüm ECC protokollerinin temelini oluşturur.
Nokta toplama işleminin kapalılık, değişmelik, birim eleman ve ters eleman özellikleri, eliptik eğri noktalarının geçerli bir matematiksel grup oluşturmasını sağlar. Bu grup yapısı, ECC'nin güvenliğini dayandırdığı ayrık logaritma probleminin varlığını garanti eder.
Bitcoin işlem imzalaması, TLS el sıkışması ve Ethereum adres türetmesi gibi modern kriptografik işlemlerin tamamı, nokta toplama işleminin milyonlarca kez tekrarlanmasına dayanır. Bu işlem, ECC'nin verimliliğini ve güvenliğini sağlayan yapı taşıdır.
Nokta Matematiği: Geometrik Toplama
Eliptik eğri kriptografisinin tüm gücü, son kertede tek bir işlemin üzerine inşa edilmiştir: nokta toplama. Bitcoin'in bir işlem imzalaması, TLS el sıkışmasının paylaşılan gizli anahtarı üretmesi, Ethereum'un bir adres türetmesi hepsi bu basit görünen ama derin matematiksel özelliklere sahip geometrik işlemin milyonlarca kez tekrarlanmasından doğar. Nokta toplamayı anlamak; eliptik eğrilerin neden güvenli olduğunu, neden kırılmasının imkânsız kabul edildiğini ve bu yapıların kriptografide neden bu denli hâkim olduğunu anlamaktır.
Önceki konularda (Weierstrass Formülü) gördüğümüz üzere, eliptik bir eğri \(y^2 = x^3 + ax + b\) şeklinde bir denklemdir ve bu denklemi sağlayan tüm \((x, y)\) koordinat çiftleri eğrinin noktalarını oluşturur. Kriptografide bu eğri her zaman büyük bir asal sayı \(p\) ile tanımlanan bir sonlu alan (\(\mathbb{F}_p\)) üzerinde çalışır; dolayısıyla "denklem üzerindeki noktalar" ifadesi, modüler aritmetik kurallarına uyan ayrık tam sayı çiftleri anlamına gelir.
Eliptik eğri üzerindeki noktaların kümesi, belirli bir işlem (nokta toplama) ile birlikte soyut bir matematiksel grup oluşturur. Bu grup yapısının var olabilmesi için nokta toplama işleminin dört temel kuralı sağlaması gerekir: işlemin her zaman eğri üzerinde kalması (kapalılık), sıranın sonucu değiştirmemesi (değişmelik), grubun bir "hiçlik" elemanının bulunması (birim eleman) ve her noktanın bir tersinin olması (ters eleman). Bu dört kural birlikte, nokta toplamayı kriptografik açıdan kullanılabilir kılan yapının temelidir.
Geometrik Sezgi: Kesen-Teğet Yöntemi (Chord-Tangent Method)
Nokta toplamayı anlamanın en sezgisel yolu, gerçek sayılar (\(\mathbb{R}\)) üzerindeki sürekli grafik üzerinden başlamaktır. Buradaki görsel mantık daha sonra modüler aritmetiğe birebir çevrilecektir.
Eliptik eğri üzerinde iki farklı nokta seçelim: \(P = (x_1, y_1)\) ve \(Q = (x_2, y_2)\). Bu iki noktadan geçen düz bir doğru çizdiğimizde, bu doğru genel olarak eğriyi üçüncü bir noktada daha keser; bu noktaya \(R'\) diyelim. �?imdi kritik adım: \(R'\) noktasının x-eksenine göre dikey yansımasını alırız, yani \(y\) koordinatının işaretini tersine çeviririz. Bu yansıma noktası, yani \(R = (x_3, -y_3')\), \(P + Q\) toplamının tanımıdır.
Bu geometrik tanımın matematiksel olarak neden mantıklı olduğu şu şekilde açıklanabilir: Weierstrass denklemi \(y^2 = x^3 + ax + b\), sağ tarafı sabit tutulduğunda \(y\)'nin hem pozitif hem de negatif karekökünü çözüm olarak kabul eder. Dolayısıyla eğri, x-eksenine göre tam bir ayna simetrisi taşır: bir \((x, y)\) noktası eğri üzerindeyse \((x, -y)\) de her zaman eğri üzerindedir. Bu simetriyi kullanarak elde ettiğimiz yansıma noktası, grubun "ters eleman" özelliğini de doğal olarak gömülü hale getirir. Eğer \(R' = (x, y)\) ise, \(R' + (-R') = \mathcal{O}\) (sonsuz nokta) olacak şekilde \(-R' = (x, -y)\) eğri üzerindedir.
Sezgisel bir soru: Doğrunun eğriyle kesiştiği noktayı direk toplam olarak almak yerine neden yansımasını alıyoruz? Cevap, grup aksiyomlarında gizlidir. Eğer yansıma almasaydık, \(P + Q + R' = \mathcal{O}\) kuralı sağlanamazdı ve oluşturulan yapı geçerli bir grup olmayacaktı dolayısıyla üzerine güvenli kriptografi inşa edilemeyecekti. Yansıma işlemi, grubun iç tutarlılığını sağlayan zorunlu cebirsel bir tercihtir.
Geometrik Seksek: Kesen-Teğet
P ve Q noktalarından atılan neon lazerin eğriyi kesişini ve hedefe kilitlenmesini izleyin.
Kullanım Kılavuzu: Geometrik Seksek
Bu simülasyon, eliptik eğri y² = x³ - 4x üzerinde nokta toplama işlemini lazer animasyonu ile gösterir. Eğri neon tüp (TubeGeometry) olarak render edilir; nokta koordinatları değişmez. SCALAR = 1.2 ile görselleştirilir.
Nokta Kontrolü
P ve Q slider'ları: t parametresi [-100, 100] aralığında. Loop component (|t| ≤ 50): x in [-2, 0]. Open branch (|t| > 50): x in [2, 10].
Preset chip'ler: Kesen, Teğet (2P), Dikey (P=−Q) ve Sayfa keseni slider'ları anında ayarlar. HUD altındaki 4 adım göstergesi animasyon fazını izler.
Atış Modları
Kesen (P ≠ Q): λ = (y2 - y1) / (x2 - x1). Teğet (2P): λ = (3x1² - 4) / (2y1). Dikey (P = -Q): λ = ∞ (sonsuz atış).
Dikey mod: Lazer sonsuza gider; HUD R = O gösterir, adım 2–4 atlanır.
Animasyon ve Kamera
Animasyon adımları: Lazer atışı (2.5s) → -R kesişimi + shockwave → X ekseninde yansıma → R kilitleme. Kamera: OrbitControls ile döndürün; sağ üstteki ◎ Merkezle varsayılan görünüme döner.
Görsel Harita: Sağ üstte P/Q/−R/R renkleri; animasyonla aktif noktalar vurgulanır. Cam HUD sol üstte λ ve adım izleme sunar.
Cebirsel Türetme: Toplama Formülleri
Geometrik sezgiden cebirsel formüllere geçelim. İki ayrı nokta \(P = (x_1, y_1)\) ve \(Q = (x_2, y_2)\) verildiğinde (bu iki nokta birbirinden farklı, yani \(x_1 \neq x_2\)), \(P + Q = R = (x_3, y_3)\) toplamını bulmak için şu adımları izleriz:
Eğim \(m\) bulunduktan sonra, doğrunun eğriyle üçüncü kesişiminin x koordinatı ve ardından yapılan yansımanın x koordinatı şöyle hesaplanır:
Yansıma işlemini de hesaba katarak sonuç noktasının y koordinatı:
Bu üç formül birlikte, eliptik eğri nokta toplamının tüm cebirsel iskeletini oluşturur. \(\mathbb{R}\) üzerinde geometrik çizimle yapılan işlem, sonlu alanda tamamen bu üç modüler denklemle ikame edilir.
Özel Durumlar: Grubun Tamamlanması
Genel toplama formülleri yalnızca \(x_1 \neq x_2\) olduğunda geçerlidir. Eliptik eğri grubu matematiksel olarak tam ve kapalı olabilmek için üç özel durumun da ayrıca ele alınması gerekir. Bu durumları atlamak, kriptografik uygulamalarda ciddi hatalara veya güvenlik açıklarına yol açar.
| Özel Durum | Koşul | Geometrik Anlamı | Matematiksel Sonuç |
|---|---|---|---|
| Nokta Katlama (Point Doubling) |
\(P = Q\) yani \(x_1 = x_2\) ve \(y_1 = y_2\) | İki farklı nokta yoktur. Tek nokta üzerinden bir teğet doğrusu çizilir; bu teğet eğriyi ikinci bir noktada keser, yansıması alınır. | Eğim formülü türeve dönüşür: \(m = (3x_1^2 + a) \cdot (2y_1)^{-1} \pmod p\). Aynı \(x_3, y_3\) formülleri uygulanır. (Bir sonraki konuda derinlemesine ele alınacaktır.) |
| Dikey Doğru (Additive Inverse) |
\(x_1 = x_2\) ve \(y_1 = -y_2 \pmod p\) | İki nokta x-eksenine göre birbirinin tam yansımasıdır. Aralarından geçen doğru tamamen dikeydir; eğriyi sonsuzda keser. | \(P + (-P) = \mathcal{O}\) (Sonsuz Nokta). Bu durum, her noktanın grubun ters elemanının varlığını garanti eder. |
| Sonsuz Nokta (Identity Element) |
\(P = \mathcal{O}\) veya \(Q = \mathcal{O}\) | Sonsuz nokta, grubun birim elemanıdır. Geometrik olarak "görünmez" ama cebirsel olarak vazgeçilmezdir. | \(P + \mathcal{O} = P\) ve \(\mathcal{O} + Q = Q\). Sonsuz nokta ile toplama, sayısal değeri değiştirmez; tıpkı normal toplamada sıfır elemanı gibi. |
Sonsuz Nokta (\(\mathcal{O}\)): Grubun Temeli
Sonsuz nokta (\(\mathcal{O}\)), eliptik eğri grubunun matematiksel hiyerarşisinde en soyut, ancak sistemin ayakta kalmasını sağlayan en kritik yapı taşıdır. Standart Kartezyen koordinat sisteminde doğrudan sayısal bir karşılığı olmayan bu eleman, geometride "sonsuzda kesişme" konseptine dayanır. İki paralel doğrunun Öklid (gerçel sayılar) dünyasında asla birleşemeyeceği gerçeği, projektif geometri (projective geometry) uzayına geçildiğinde bu doğruların "sonsuzda tek bir ideal noktada buluştuğu" varsayımıyla aşılır. Eliptik eğrilerde bu yaklaşım, eğrinin cebirsel bütünlüğünü tamamlayarak her yönden kesintisiz ve kapalı bir matematiksel uzay inşa edilmesini sağlar.
Eliptik eğri grubunun tam teşekküllü bir değişmeli grup (Abelian group) yapısı sergileyebilmesi için sonsuz nokta üç temel ve vazgeçilmez rolü üstlenir:
- Birim Eleman (Identity): Cebirsel yapının sıfır noktasıdır. Eğri üzerindeki herhangi bir \(P\) noktası ile toplandığında, sistemin dengesini bozmayarak sonucu aynı bırakır: \(P + \mathcal{O} = P\). Bu durum, tam sayılar aritmetiğindeki sıfırın (0) toplama işlemindeki etkisiz eleman rolünün eliptik eğri uzayındaki kusursuz karşılığıdır.
- Ters Eleman Garantisi (Inverses): Geometrik düzlemde, eğri üzerinde x-eksenine dik çizilen dikey bir doğru eğriyi iki noktada keser. Her \(P = (x, y)\) noktasının simetrik zıttı olan \(-P = (x, -y \bmod p)\) elemanı ile toplanması, bu dikey doğrunun sonsuzluğa uzanarak sonsuz noktada eğriyi kestiği anlamına gelir. Matematiksel olarak bu iki ters nokta birleştirildiğinde sonuç her zaman birim elemana döner (\(P + (-P) = \mathcal{O}\)) ve grubun kapalılık aksiyomu güvence altına alınır.
- Skaler Çarpım Döngüsü (Cyclic Subgroups): Kriptografik sistemlerin güvenliği, belirli bir \(G\) (Üretici - Generator) noktasının kendisiyle ardışık olarak toplanmasıyla oluşan döngüsel alt gruplara dayanır. Bu skaler ekleme işlemi devam ettiğinde, grubun sınır mertebesine (order, \(n\)) ulaşıldığı an \(n \cdot G = \mathcal{O}\) eşitliği elde edilir ve döngü başa sarar. Bu sınır, eliptik eğri ayrık logaritma probleminin (ECDLP) zorluğunu belirleyen kriptografik anahtar uzayının (key space) kesin boyutunu çizer.
Sistemin yazılım ve donanım mimarisindeki (implementasyon) karşılığına bakıldığında, sonsuz
noktanın
standart afin \((x, y)\) koordinat çiftleriyle doğrudan ifade edilememesi özel mühendislik
yaklaşımları
gerektirir. Yazılım geliştirme aşamasında bu soyut kavram, veri yapılarında sıklıkla izole
edilmiş bir
enum varyantı veya özel bir işaretçi (sentinel value) olarak kodlanır. Rust gibi
bellek ve tür
güvenliğini (type-safety) merkeze alan modern dillerdeki gelişmiş ECC kütüphanelerinde bu ayrım,
derleyici
(compiler) seviyesinde zorunlu tutulur; sonsuz noktayı sıradan bir geçerli koordinatmış gibi
işlemeye
çalışmak anında derleme hatası verir. Ek olarak, gelişmiş sistemlerde projektif koordinatlara
(X, Y, Z)
geçiş yapılarak \(Z=0\) durumunun matematiksel olarak sonsuz noktayı temsil etmesi sağlanır; bu
da kod
dallanmalarını (if-else branching) tamamen ortadan kaldırarak sabit zamanlı (constant-time)
güvenli bir
yürütme ortamı sunar.
Adım Adım Sayısal Örnek: \(\mathbb{F}_{97}\) Üzerinde Nokta Toplama
Adım Adım Sayısal Örnek: \(\mathbb{F}_{97}\) Üzerinde Nokta Toplama
Formülleri soyut kalmaktan çıkarıp küçük bir sonlu alan üzerinde elle hesaplanabilir bir örneğe dönüştürelim. secp256k1 ile aynı yapıdaki \(y^2 = x^3 + 7\) eğrisini \(p = 97\) alanında kullanıyoruz.
Noktaların doğruluğu: \(5^3 + 7 \equiv 35 \equiv 36^2 \pmod{97}\) ve \(12^3 + 7 \equiv 86 \equiv 38^2 \pmod{97}\).
Doğrulama: \(P + Q = (88, 65)\)
Bulduğumuz noktanın eğri denklemini sağlayıp sağlamadığını test edelim.
Bu nokta yine aynı eğri üzerindedir ve her adımda modüler aritmetik sistemi kapalı tutar.
Kriptografik Bağlam: Bu İşlem Neden Güvenli Kılar?
Nokta toplamayı kriptografik açıdan güçlü yapan özellik, bu işlemin tek yönlülüğüdür (one-way function). Bir başlangıç noktası \(G\) (üretici nokta) ile bir tam sayı \(k\) (gizli anahtar) verildiğinde, \(k\) defa nokta toplama yaparak \(Q = k \cdot G\) sonuç noktasını hesaplamak son derece hızlıdır. Bu işlem, Double-and-Add algoritması kullanılarak \(O(\log k)\) adımda tamamlanır 256 bitlik bir \(k\) için yalnızca 256 adım yeterlidir.
Ancak tersini yapmak, yani sadece \(G\) ve \(Q\) bilindiğinde \(k\)'yı bulmak bu Eliptik Eğri Ayrık Logaritma Problemi (ECDLP)'dir ve günümüzdeki en güçlü bilgisayarlar için bile hesaplamalı olarak imkânsız kabul edilmektedir. Sonlu alandaki nokta bulutu o kadar düzensiz ve öngörülemez dağılmıştır ki, brute-force deneme dışında bilinen hiçbir verimli algoritma bu problemi çözemez. secp256k1 eğrisinde \(p \approx 2^{256}\) olduğundan, olası anahtar uzayı evrendeki atom sayısından kat kat büyüktür.
RSA'da güvenlik, büyük sayıları asal çarpanlarına ayırmanın (faktorizasyon) zorluğuna dayanır ve bu problem için alt-üstel algoritmalar (örn. NFS) mevcuttur. Bu nedenle 3072-bitlik bir RSA anahtarı, yalnızca 256-bitlik bir ECC anahtarıyla eşdeğer güvenlik sunar. Nokta toplama işleminin üzerine inşa edilen ECDLP ise bu tür alt-üstel saldırılara karşı günümüzde dirençlidir; aynı güvenlik seviyesi çok daha küçük anahtar boyutlarıyla elde edilir.
Rust ile Nokta Toplama Implementasyonu
Aşağıdaki Rust kod paneli, Weierstrass eğrisi üzerindeki nokta toplama operasyonunu özel
durumlar dahil
eksiksiz biçimde uygular. Sonsuz nokta ayrı bir enum varyantı olarak modellenerek
tip güvenliği
sağlanmış; çarpımsal ters, Fermat'ın Küçük Teoremi tabanlı sabit zamanlı üs alma ile
hesaplanmaktadır.
/// Eliptik eğri üzerindeki noktaları temsil eden tip.
/// Infinity varyantı, grubun birim elemanını (sonsuz nokta) temsil eder.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Point {
Coordinate(u128, u128), // (x, y) koordinatı
Infinity, // Grubun birim elemanı O
}
/// Weierstrass eğrisi: y² = x³ + ax + b (mod p)
#[derive(Debug)]
pub struct EllipticCurve {
pub a: u128,
pub p: u128, // Asal modül
}
impl EllipticCurve {
/// Fermat'ın Küçük Teoremi: a^(p-2) mod p
/// Sabit zamanlı (constant-time) modüler ters bulma.
fn mod_inv(&self, a: u128) -> u128 {
self.mod_pow(a, self.p - 2)
}
/// Square-and-Multiply ile hızlı modüler üs alma.
fn mod_pow(&self, mut base: u128, mut exp: u128) -> u128 {
let mut result = 1;
base %= self.p;
while exp > 0 {
if exp % 2 == 1 {
result = result.wrapping_mul(base) % self.p;
}
base = base.wrapping_mul(base) % self.p;
exp /= 2;
}
result
}
/// İki noktayı toplar. Tüm özel durumlar (sonsuz nokta,
/// dikey doğru, nokta katlama) ayrı ayrı ele alınmıştır.
pub fn add(&self, p1: Point, p2: Point) -> Point {
match (p1, p2) {
// Birim eleman kuralları: O + P = P ve P + O = P
(Point::Infinity, other) | (other, Point::Infinity) => other,
(Point::Coordinate(x1, y1), Point::Coordinate(x2, y2)) => {
// Dikey doğru: P + (-P) = O
if x1 == x2 && (y1 + y2) % self.p == 0 {
return Point::Infinity;
}
// Nokta katlama: P = Q ise teğet formülü
let m = if x1 == x2 && y1 == y2 {
// m = (3x1² + a) · (2y1)⁻¹ mod p
let num = (3 * x1 % self.p * x1 % self.p + self.a) % self.p;
let den = self.mod_inv(2 * y1 % self.p);
num * den % self.p
} else {
// m = (y2 - y1) · (x2 - x1)⁻¹ mod p
let dy = (y2 + self.p - y1) % self.p;
let dx_inv = self.mod_inv((x2 + self.p - x1) % self.p);
dy * dx_inv % self.p
};
// x3 = m² - x1 - x2 (mod p)
let x3 = (m * m % self.p + 2 * self.p - x1 - x2) % self.p;
// y3 = m(x1 - x3) - y1 (mod p)
let y3 = (m * ((x1 + self.p - x3) % self.p) % self.p
+ self.p - y1) % self.p;
Point::Coordinate(x3, y3)
}
}
}
}
fn main() {
// y² = x³ + 7 (mod 97) secp256k1 benzeri küçük örnek
let curve = EllipticCurve { a: 0, p: 97 };
let p = Point::Coordinate(3, 6);
let q = Point::Coordinate(10, 17);
let result = curve.add(p, q);
println!("P + Q = {:?}", result);
// Birim eleman testi: P + O = P
let identity_test = curve.add(p, Point::Infinity);
assert_eq!(identity_test, p, "Birim eleman hatası!");
println!("P + O = P doğrulandı: {:?}", identity_test);
}