x³ = 1 có 3 nghiệm - và 2 nghiệm trong đó đang bảo vệ Ethereum
x³ = 1 có 3 nghiệm, không phải 1. Hai nghiệm phức bị gọi là 'vô dụng' thực ra là xương sống toán học của BLS12-381 - chữ ký số giữ 918k validator Ethereum.
Mở đầu - một comment TikTok
Tuần trước mình lướt TikTok và dừng lại ở một clip dạy toán. Thầy giáo viết lên bảng $x^3 = 1$ và hỏi học sinh: "Nghiệm là gì?". Dưới comment là 478 bình luận cãi nhau - và mình scroll qua đúng cái khoảnh khắc nên chụp lại màn hình:

Hầu hết comment trả lời x = 1. Một số bạn tốt nghiệp lớp 12 nhớ ra "còn hai nghiệm phức nữa". Nhưng cái làm mình dừng lại không phải các câu trả lời đúng - mà là cái sentiment rất rõ trong mấy comment được like nhiều nhất. Đại ý: nghiệm phức chỉ là phức tạp hóa thôi, thực tế có ai dùng đâu, toán kiểu này dạy xong rồi quên, chả để làm gì.
Mình đọc xong và ngồi im mấy phút. Không phải vì bực. Mà vì mình nhận ra cái comment đó không thực sự nói về toán. Nó đang biểu lộ một thói quen tư duy mà mình thấy ở khắp mọi nơi trong đời sống kỹ thuật ngày nay - và nó là điểm thực sự mình muốn nói trong bài này.
Thesis của bài rất đơn giản: nhiều người đang quá dễ dãi với kiến thức. Biết một phần, nghĩ là biết hết. Tìm ra được một giải pháp, nghĩ đó là giải pháp duy nhất. Bạn biết chắc chắn x = 1 là một nghiệm của x³ = 1, và bạn đóng bài toán ở đó. Hai nghiệm kia? "Phức tạp hóa, bỏ đi". Xong. Chuyển tab. Lướt TikTok tiếp.

Mình cho rằng đây là một thói quen rất tệ - không phải vì sai ở bài toán này (bạn đúng một nghiệm thật), mà vì nó huấn luyện não bạn coi "đủ để pass câu hỏi" đồng nghĩa với "đủ để hiểu vấn đề". Hai thứ đó khác nhau rất xa. Và sự khác biệt sẽ đuổi theo bạn trong tất cả các bài toán khó hơn sau này - những bài mà nhiều nghiệm không chỉ tồn tại trên giấy, mà có thể là cửa vào một thế giới hoàn toàn khác. Bạn sẽ đi qua những cánh cửa đó mà không biết chúng ở đó.
Bài viết này có hai nhiệm vụ. Thứ nhất, giải chi tiết x³ = 1 để cho thấy hai nghiệm "phức tạp hóa" kia thực ra là cấu trúc đẹp mà bạn đang bỏ lỡ. Thứ hai - và đây mới là phần chính - cho các bạn xem một ví dụ cụ thể, tầm cỡ hàng trăm tỉ USD, về chuyện điều gì xảy ra khi ai đó không bỏ qua hai nghiệm kia: họ đã xây được một trong những viên gạch nền của chữ ký số đang giữ Ethereum chạy. Nếu bạn đọc tới cuối và vẫn nghĩ "nghiệm phức là phức tạp hóa", mình thua, mình nhận sai. Nhưng mình tin là bạn sẽ không nghĩ vậy nữa.
Phần 1: Giải lại bài toán - chậm rãi
Bắt đầu từ chỗ dễ nhất. Phương trình x³ = 1, hay viết lại:
$$x^3 - 1 = 0$$
Có một hằng đẳng thức mà ai học cấp 3 cũng gặp: $a^3 - b^3 = (a-b)(a^2 + ab + b^2)$. Thay $b = 1$ vào:
$$x^3 - 1 = (x - 1)(x^2 + x + 1) = 0$$
Một tích bằng 0 khi và chỉ khi có ít nhất một thừa số bằng 0. Vậy hoặc $x - 1 = 0$ (cho ra $x = 1$), hoặc $x^2 + x + 1 = 0$.
Vì sao $x = 1$ là nghiệm thực duy nhất
Xét phương trình bậc hai $x^2 + x + 1 = 0$. Tính biệt thức:
$$\Delta = b^2 - 4ac = 1 - 4 = -3$$
$\Delta < 0$ nên phương trình này không có nghiệm thực - đây là điều trẻ con cấp 3 biết. Nhưng nếu bạn muốn một lập luận đẹp hơn, không cần biệt thức, thì đây:
Xét hàm $f(x) = x^3$ trên tập số thực. Đạo hàm $f'(x) = 3x^2 \geq 0$ với mọi $x$, và chỉ bằng 0 tại đúng một điểm ($x = 0$). Có nghĩa là $f$ đơn điệu tăng nghiêm ngặt. Một hàm đơn điệu tăng nghiêm ngặt thì mỗi giá trị đầu ra chỉ đạt được bởi đúng một giá trị đầu vào. Phương trình $f(x) = 1$ vì vậy có đúng một nghiệm thực. Xong - không cần tính toán gì.

Hai cách nhìn cho cùng một kết luận. Mình thích cách thứ hai hơn vì nó không dùng công cụ, chỉ dùng khái niệm.
Hai nghiệm phức trông như thế nào
Giải $x^2 + x + 1 = 0$ bằng công thức nghiệm:
$$x = \frac{-1 \pm \sqrt{-3}}{2} = \frac{-1 \pm i\sqrt{3}}{2}$$
Quy ước gọi:
$$\omega = \frac{-1 + i\sqrt{3}}{2}, \qquad \omega^2 = \bar{\omega} = \frac{-1 - i\sqrt{3}}{2}$$
Ba nghiệm của $x^3 = 1$ là ${1, \omega, \omega^2}$, gọi chung là căn bậc ba của đơn vị - cube roots of unity.
Có một cách nhìn khác đẹp hơn rất nhiều. Viết lại $1$ trong dạng lượng giác: $1 = e^{i \cdot 2\pi k}$ với $k$ là số nguyên bất kỳ. Khi đó:
$$x = e^{i \cdot 2\pi k / 3}, \quad k = 0, 1, 2$$
Ba giá trị này nằm trên đường tròn đơn vị trong mặt phẳng phức, ở các góc $0°$, $120°$, và $240°$. Nối ba điểm đó lại, bạn được một tam giác đều hoàn hảo, tâm tại gốc tọa độ.

Đây là chi tiết mà mình nghĩ nếu thầy giáo trong clip TikTok kia vẽ ra, có khi bạn comment "phức tạp hóa" đã không viết câu đó. Bài toán x³ = 1 không phải là một câu đố khô khan - nó là một cách yêu cầu: "hãy tìm cho tôi ba đỉnh của một tam giác đều trên đường tròn đơn vị". Toán học đang nói chuyện với bạn bằng hình học, và bạn chỉ cần lùi lại một bước để nghe thấy.
Hai tính chất nhỏ nhưng sẽ rất quan trọng ở phần sau:
- $\omega^3 = 1$ (hiển nhiên, vì $\omega$ là nghiệm của phương trình)
- $1 + \omega + \omega^2 = 0$ (tổng tọa độ ba đỉnh của một tam giác đều có tâm tại gốc - bằng 0 là hiển nhiên)
Giữ hai đẳng thức này trong đầu. Chúng sẽ quay lại ở phần BLS.
Phần 2: "Phức tạp hóa" là một sự hiểu lầm
Trước khi đi vào crypto, mình muốn dừng một chút ở ý "nghiệm phức chỉ là phức tạp hóa".
Lịch sử toán học có một thói quen kỳ cục: mỗi lần một lớp số mới xuất hiện, người cùng thời đều gọi nó là "giả", "ảo", hoặc "không có thật". Người Hy Lạp cổ không chấp nhận số âm - với họ, bạn không thể "có âm ba quả táo". Người châu Âu thời Phục Hưng chống lại số vô tỉ. Khi Cardano và Bombelli bắt đầu dùng $\sqrt{-1}$ để giải phương trình bậc ba vào thế kỷ 16, Descartes mỉa mai gọi chúng là "số tưởng tượng" - imaginary numbers - và cái tên đó dính đến tận hôm nay, một trò đùa ngôn ngữ kéo dài năm trăm năm.
Nhưng hôm nay bạn mua ba quả táo nợ người bán hai quả, và không ai bảo bạn đang làm toán "giả". Số âm đã từ "ảo" thành bình thường vì cuộc sống buộc phải dùng đến chúng. Số phức đang ở cùng giai đoạn đó, chỉ là chậm hơn vài thế kỷ - bởi vì ứng dụng của chúng nằm ở những chỗ mà người ngoài ngành không nhìn thấy.
Để thấy rõ chuyện này, hãy so sánh hai thế giới. Trong thế giới số thực mà bạn học ở trường, phương trình bậc hai có lúc cho hai nghiệm, có lúc cho một, có lúc không có nghiệm nào cả. Ví dụ cụ thể:
- $x^2 - 5x + 6 = 0$ → có hai nghiệm: $x = 2, x = 3$
- $x^2 - 4x + 4 = 0$ → có đúng một nghiệm (nghiệm kép): $x = 2$
- $x^2 + 1 = 0$ → không có nghiệm nào
Ba phương trình, ba số nghiệm khác nhau (2, 1, 0). Bạn phải nhớ công thức tính $\Delta$ để phân biệt case nào ra case nào. Đó là một thế giới đầy ngoại lệ.
Bây giờ sang thế giới số phức. Có một định lý tên là Định lý cơ bản của Đại số (Fundamental Theorem of Algebra) nói rằng: trên số phức, mọi đa thức bậc $n$ đều có đúng $n$ nghiệm (tính cả bội). Không lúc có lúc không. Không phải phân biệt case. Kiểm tra lại ba ví dụ trên trong thế giới số phức:
- $x^2 - 5x + 6 = 0$ → vẫn hai nghiệm $x = 2, x = 3$ (không đổi, vì nghiệm thực cũng là số phức)
- $x^2 - 4x + 4 = 0$ → đếm bội, cũng là 2 nghiệm ($x = 2$ đếm hai lần)
- $x^2 + 1 = 0$ → bây giờ có hai nghiệm $x = i$ và $x = -i$
Luôn luôn 2 nghiệm cho đa thức bậc 2. Luôn luôn 3 nghiệm cho đa thức bậc 3. Không ngoại lệ. Không "tùy trường hợp".
Đây mới là điểm mình muốn các bạn thấy: sang số phức không phải làm bài toán phức tạp hơn, mà là làm cho luật chơi trở nên nhất quán hơn. Giống như bạn đang chơi một trò chơi mà luật thay đổi theo từng tình huống (phải nhớ case 1, case 2, case 3), rồi ai đó chỉ cho bạn một phiên bản mới với một luật duy nhất áp dụng cho tất cả. Phiên bản mới ấy trông lạ vì có thêm vài quân cờ (các số như $i$ và $\omega$), nhưng nó dễ chơi hơn vì không còn case-by-case.
Cái mà các bạn TikTok gọi là "phức tạp hóa" thực ra là ngược lại - nó là sự đơn giản mà họ chưa được dạy để nhìn thấy. Và phần tiếp theo của bài, mình muốn chỉ ra một chỗ cụ thể mà sự đơn giản ấy đang làm việc - không phải trong sách giáo khoa, mà trong một thứ mà người đọc bài này có thể đang có app trong máy: ví Ethereum.
Phần 3: Elliptic curve - cái cây mà crypto hiện đại đang leo lên
Để hiểu được $\omega$ có liên quan gì đến Ethereum, chúng ta cần ghé qua một khái niệm trung gian: đường cong elliptic (elliptic curve). Đừng để cái tên làm bạn sợ. Nó không phải hình elip. Một trong những thú vị nhỏ của toán học là tên gọi này đến từ một chuyện lạc đề thế kỷ 19 - các nhà toán học nghiên cứu "elliptic integrals" (tích phân dùng để tính chu vi hình elip) và phát hiện ra một loại đường cong liên quan đến các tích phân đó. Cái tên dính, dù bản thân đường cong không elip chút nào.
Định nghĩa, chậm thôi
Đường cong elliptic trong dạng đơn giản nhất là tập hợp các điểm $(x, y)$ thỏa mãn phương trình:
$$y^2 = x^3 + ax + b$$
với $a, b$ là các hằng số. Vẽ ra trên mặt phẳng thực, nó trông như một cái cong mềm - đôi khi có một phần kín và một phần mở, đôi khi liền một khối. Chính xác hơn, đây là hình dạng của curve $y^2 = x^3 + 4$ - curve mà Ethereum đang dùng - trên số thực:

Dừng một nhịp - "cộng hai điểm" nghĩa là gì?
Trước khi đi tiếp, mình biết chỗ này là cửa ải đối với người mới. Khi nghe "cộng hai điểm trên đường cong", phản ứng bình thường là: điểm có phải số đâu mà cộng được? $2 + 3 = 5$ thì hiểu, chứ "điểm A cộng điểm B" là cái gì? Câu hỏi này rất đúng, và mình muốn giải quyết nó trước khi kể luật chơi.
Đây là chuyện: trong toán học, từ "phép cộng" không chỉ dành cho số. Nó là cái tên mà người ta đặt cho bất kỳ phép toán nào nhận vào hai thứ và trả ra một thứ cùng loại, miễn là phép toán ấy tuân theo vài luật quen thuộc:
- Có một "phần tử 0" - cộng với nó không đổi gì. Với số thường, đó là số 0. Với cộng vector, đó là vector không.
- Có "số đối" - cộng một thứ với số đối của nó ra "phần tử 0". Với số thường, $5 + (-5) = 0$.
- Có tính kết hợp - $(A + B) + C = A + (B + C)$. Tức là thứ tự gộp không quan trọng.
- Có tính giao hoán - $A + B = B + A$. (Không bắt buộc, nhưng phép cộng đẹp thường có).
Nếu bạn nghĩ ra một phép toán trên một tập hợp nào đó thỏa cả 4 tính chất trên, toán học gọi nó là phép cộng và gọi tập hợp đó là một nhóm abelian. Không quan trọng tập hợp là gì - có thể là số, vector, ma trận, hàm số, hoặc điểm trên một đường cong.
Ví dụ dễ thấy hơn: nghĩ về đồng hồ 12 giờ. Giờ 10 "cộng" với 5 giờ ra mấy? Không phải 15 - đồng hồ chỉ có 12 số. Ra 3 giờ. Phép "cộng" này kỳ lạ (10 + 5 = 3???), nhưng nó tuân theo cả 4 luật trên: có phần tử 0 (chính là 12 giờ), có số đối (đối của 5 giờ là 7 giờ, vì $5 + 7 = 12 \equiv 0$), có tính kết hợp và giao hoán. Đó là lý do toán học vẫn gọi đây là "phép cộng" - nó không phải cộng số thực, nhưng nó hành xử như cộng. Tên gọi dùng theo hành vi, không theo bản chất.
Giờ quay lại elliptic curve. Các nhà toán học thế kỷ 19 hỏi: "có cách nào định nghĩa một phép toán trên các điểm của đường cong, sao cho nó thỏa cả 4 luật trên không?" Họ tìm ra được - và phép toán ấy được mô tả bằng một quy tắc hình học cụ thể. Vì nó thỏa các luật của cộng, họ gọi nó là "cộng" và viết bằng dấu +. Không phải vì các điểm "cộng vào nhau" theo nghĩa vật lý. Mà vì phép toán mới này hành xử y hệt phép cộng quen thuộc.
Luật chơi cụ thể
Giờ mới đến quy tắc. Cho hai điểm $P$ và $Q$ bất kỳ trên curve:
Bước 1: vẽ một đường thẳng đi qua $P$ và $Q$.
Bước 2: đường thẳng này sẽ cắt curve tại đúng một điểm thứ ba, gọi là $R$. (Đây là tính chất toán học đặc biệt của phương trình bậc ba - bạn có thể tin mình hoặc tự chứng minh sau.)
Bước 3: lấy $R$ rồi phản xạ qua trục hoành - tức là giữ nguyên tọa độ $x$, đổi dấu tọa độ $y$. Điểm phản xạ ấy được gọi là $P + Q$.

Đầu vào: hai điểm trên curve. Đầu ra: một điểm mới, cũng trên curve. Đó là toàn bộ "phép cộng". Không có gì bí ẩn - chỉ là một quy trình hình học mà bạn lặp đi lặp lại.
"Tại sao phải phản xạ?" - câu hỏi mà ai cũng hỏi
Đến đây bạn có thể đang nhíu mày: đợi đã, giao điểm thứ ba đã là $R$ rồi, sao lại phải phản xạ thêm? Sao không định nghĩa luôn $P + Q = R$ cho gọn? Câu hỏi cực tốt - và câu trả lời là một chỗ mình thấy rất đẹp của toán học.
Để cho dễ phân biệt, mình tạm gọi hai cách định nghĩa:
- Cách ngây thơ: $P * Q = R$ (không phản xạ, dùng dấu
*để khỏi lẫn) - Cách đúng: $P + Q = $ phản xạ của $R$ qua trục hoành (dùng dấu
+như toán học thật)
Nhớ lại 4 luật của phép cộng: identity, inverse, associativity, commutativity. Mình sẽ chỉ ra cách ngây thơ hỏng ngay ở luật đầu tiên.
Hỏng ở "identity". Luật đầu nói: phải tồn tại một "phần tử 0" - gọi là $e$ - sao cho với mọi điểm $P$, ta có $P * e = P$. Viết ra bằng định nghĩa của cách ngây thơ: đường thẳng đi qua $P$ và $e$ phải cắt curve tại điểm thứ ba chính là $P$. Tức là đường thẳng $Pe$ phải "đi qua $P$ hai lần" - hay nói cách khác, nó phải là tiếp tuyến của curve tại $P$.
Nhưng vấn đề: tiếp tuyến tại $P$ là một đường khác hẳn tiếp tuyến tại $Q$, tại $R$, tại bất kỳ điểm nào khác. Nhìn hình sẽ rõ:

Để có identity, ta cần tìm một điểm $e$ sao cho cùng một điểm $e$ đó nằm trên tiếp tuyến tại $P$, VÀ trên tiếp tuyến tại $Q$, VÀ trên tiếp tuyến tại mọi điểm khác của curve. Nhưng hai đường thẳng khác nhau (tiếp tuyến tại $P$ và tại $Q$) chỉ cắt nhau tại đúng một điểm - chứ không thể chứa chung vô hạn điểm $e$ để dùng cho cả curve. Kết luận: cách ngây thơ không có phần tử 0. Không có 0, không thể là phép cộng. Stop.
Hỏng luôn ở "inverse". Dù ta có cố nhắm mắt bỏ qua luật identity, luật thứ hai cũng sụp: với mỗi $P$, phải có một "số đối" $-P$ sao cho $P * (-P) = 0$. Nhưng ta vừa chứng minh là không có 0 - nên cả khái niệm "số đối" cũng không định nghĩa được. Dây chuyền đổ theo.
Cách đúng cứu vãn tất cả bằng một mẹo đẹp. Thay vì cố tìm "phần tử 0" là một điểm cụ thể trên curve, toán học chọn một điểm đặc biệt nằm ngoài mặt phẳng thường - gọi là "điểm ở vô cực" (point at infinity), ký hiệu $\mathcal{O}$, tưởng tượng nó nằm "vô cùng xa theo phương thẳng đứng". Mọi đường thẳng đứng được quy ước là đi qua $\mathcal{O}$. Và ta đặt ra quy luật trung tâm: ba điểm trên curve nằm trên cùng một đường thẳng thì tổng bằng $\mathcal{O}$ (tức là bằng 0).

Nhìn hình có thể giúp bạn "thấy" cái mẹo: đường thẳng đứng đi qua $P$ và $-P$ không cắt curve ở điểm thứ ba nào thuộc mặt phẳng thường cả - nhưng ta quy ước nó đi qua $\mathcal{O}$. Vì là 3 điểm thẳng hàng ($P$, $-P$, $\mathcal{O}$), nên theo luật trung tâm: $P + (-P) + \mathcal{O} = \mathcal{O}$, rút gọn thành $P + (-P) = 0$. Như thế $\mathcal{O}$ vừa là phần tử 0 (identity), vừa là "đích đến" của mọi đường thẳng đứng.
Giờ kiểm tra lại 4 luật với định nghĩa mới:
- Identity: $\mathcal{O}$ chính là phần tử 0. $P + \mathcal{O} = P$ với mọi $P$ - bạn tính thử theo luật "ba điểm thẳng hàng thì tổng bằng 0" sẽ ra.
- Inverse: với $P = (x, y)$, số đối là $-P = (x, -y)$, vì đường thẳng đứng qua $P$ và $-P$ đi qua $\mathcal{O}$, nên $P + (-P) + \mathcal{O} = 0$ → $P + (-P) = 0$. Tức là phản xạ qua trục hoành chính là lấy số đối.
- Associativity: luật $(A+B) + C = A + (B+C)$ thỏa (chứng minh không đẹp lắm, dùng định lý Cayley-Bacharach, nhưng đúng).
- Commutativity: hiển nhiên, vì đường thẳng qua $P$ và $Q$ cùng là đường thẳng qua $Q$ và $P$.
Và bây giờ, vì sao có bước phản xạ trở nên rõ ràng: nếu $P, Q, R$ thẳng hàng thì $P + Q + R = 0$, kéo theo $P + Q = -R$. Mà $-R$ là phản xạ của $R$ qua trục hoành. Vậy bước "lấy giao điểm thứ ba rồi phản xạ" không phải quy tắc từ trên trời rơi xuống - nó là hệ quả trực tiếp của việc muốn có luật đẹp "ba điểm thẳng hàng thì tổng bằng 0". Bước phản xạ thực ra chỉ là lấy số đối.
Lạ lùng, nhưng nhất quán - và đó là toàn bộ mục đích của định nghĩa. Đây cũng là một ví dụ nhỏ cho chính thesis của bài: một bước trông "phức tạp hóa" vô cớ (sao phải phản xạ?) thực ra là cách duy nhất để toàn bộ hệ thống trở nên đơn giản hơn ở tầng trên - có đầy đủ 4 luật của nhóm abelian, và do đó dùng được cho cryptography.
Với phép cộng này, bạn có thể làm phép "nhân vô hướng": $nP = P + P + \ldots + P$ ($n$ lần). Đây là bước quan trọng.
Vì sao crypto dùng được elliptic curve
Vì phép nhân vô hướng trên elliptic curve là một "hàm một chiều": cho generator $G$ và số nguyên bí mật $k$, tính $Q = kG$ rất dễ, nhưng từ $Q$ và $G$ tìm ngược lại $k$ là bài toán Elliptic Curve Discrete Logarithm - khó đến mức không thuật toán cổ điển nào giải nổi với curve đủ lớn.
Tưởng tượng bạn có một điểm $G$ trên curve (gọi là generator) và một số nguyên $k$ mà bạn giữ bí mật. Bạn tính $Q = kG$ và công bố $Q$ cho cả thế giới. Câu hỏi: từ $Q$ và $G$, có ai tính ngược ra được $k$ không?
Đây là bài toán Elliptic Curve Discrete Logarithm - và nó được tin là khó khủng khiếp nếu curve được chọn đúng. Không có thuật toán nào trên máy tính cổ điển giải được trong thời gian hợp lý với curve đủ lớn. Đây chính là lý do elliptic curve cryptography (ECC) trở thành nền tảng của mọi thứ từ chữ ký TLS trên trình duyệt của bạn, đến ví Bitcoin, đến passport điện tử, đến chứng thực Apple Pay.

Nhìn hình để cảm được: chỉ sau 4 bước "cộng", toạ độ điểm đã nhảy từ $(1, 1)$ sang $(-1, 1)$ rồi $(0, -1)$ rồi $(3, -5)$ - không có quy luật rõ ràng nào để "đoán" đầu ra nếu bạn không làm từng bước. Với curve mà $k$ có thể lên đến $2^{256}$, thử từng bước có nghĩa là thử nhiều hơn số nguyên tử trong vũ trụ quan sát được. Đó là chỗ bảo mật ECC trú ngụ - không phải magic, chỉ là hỗn loạn có kiểm soát.
Curve có phép đối xứng bí mật
Bây giờ đến phần liên quan đến $\omega$. Xét một curve dạng đặc biệt:
$$y^2 = x^3 + b$$
(tức là đặt $a = 0$). Đây là một curve "bình thường" trong phần lớn trường hợp - nhưng nó có một tính chất kỳ cục mà curve với $a \neq 0$ không có.
Giả sử $(x, y)$ là một điểm trên curve, tức là $y^2 = x^3 + b$. Bây giờ xét điểm $(\omega x, y)$ với $\omega$ là căn bậc ba của đơn vị từ phần 1. Kiểm tra:
$$(\omega x)^3 + b = \omega^3 \cdot x^3 + b = 1 \cdot x^3 + b = x^3 + b = y^2$$
Vì $\omega^3 = 1$. Tức là $(\omega x, y)$ cũng là một điểm trên curve. Curve có một phép đối xứng ẩn: nhân tọa độ $x$ với $\omega$, điểm mới vẫn nằm trên curve.

Cách hình dung trực quan: tọa độ $x$ bây giờ là một số phức, nên nó "sống" trên mặt phẳng phức. Khi bạn nhân $x$ với $\omega$, bạn đang quay nó đi 120° quanh gốc tọa độ. Nhân thêm một lần nữa, quay thêm 120°. Ba giá trị $x$, $\omega x$, $\omega^2 x$ vì thế tạo thành ba đỉnh của một tam giác đều - y hệt cấu trúc ba nghiệm của x³ = 1 mà chúng ta gặp ở phần đầu bài. Và vì lũy thừa ba của cả ba đều bằng $x^3$, chúng cho cùng một $y^2$, nên cả ba cùng là điểm hợp lệ trên curve. Đối xứng 3-fold không nhìn thấy được nếu bạn chỉ vẽ curve trên số thực - nhưng nó có thật, và trong thế giới số phức nó chính là "xương sống" toán học của BLS12-381.
Nếu bạn làm lại phép thử với curve có $a \neq 0$, chẳng hạn $y^2 = x^3 + ax + b$:
$$(\omega x)^3 + a(\omega x) + b = x^3 + a\omega x + b \neq y^2$$
Không thỏa. Phép đối xứng biến mất ngay khi $a \neq 0$. Điều này có vẻ chỉ là một trò chơi toán học, nhưng nó có tên riêng trong chuyên môn: curve $y^2 = x^3 + b$ được gọi là có complex multiplication by $\mathbb{Z}[\omega]$ - nghĩa là curve có một cấu trúc phụ trội cho phép "nhân" các điểm với các số phức dạng $a + b\omega$ (Eisenstein integers, vành các số nguyên được Eisenstein phát hiện năm 1844).
Thuật ngữ chuyên môn gọi đó là curve có j-invariant bằng 0. Mỗi elliptic curve có một con số đặc trưng gọi là j-invariant, và curve với j=0 là một "class" đặc biệt, đối xứng cao, có nhiều phép tự đồng cấu hơn curve thường. Không có $\omega$, class này không tồn tại. Và không có class này, phần tiếp theo - BLS signatures - không tồn tại.
Phần 4: Pairing - phép nhân ma thuật
Trước khi chạm đến BLS, cần một viên gạch cuối: pairing.
Pairing là gì
Pairing là một hàm toán học nhận vào hai điểm trên elliptic curve và trả ra một số trong một nhóm đích, với tính chất song tuyến tính: các hệ số nhân vô hướng có thể "di chuyển" từ input ra số mũ của output. Chính tính chất này là nền cho BLS signature và zk-SNARK.
Tưởng tượng bạn có hai nhóm điểm trên elliptic curve, gọi là $G_1$ và $G_2$, và một nhóm thứ ba $G_T$ (các số trong một trường lớn). Pairing là một hàm số:
$$e: G_1 \times G_2 \rightarrow G_T$$
thỏa mãn một tính chất gọi là bilinearity (song tuyến tính):
$$e(aP, bQ) = e(P, Q)^{ab}$$
với mọi điểm $P \in G_1$, $Q \in G_2$, và mọi số nguyên $a, b$. Nghe trừu tượng, nhưng intuition đơn giản: bạn có thể "di chuyển" các hệ số $a, b$ từ trong ngoặc ra ngoài, như là exponent. Các scalar trở nên "free to move" - đây là tính chất duy nhất về pairing mà bạn cần nhớ.

Nhìn hình để thấy: hai cột trái là các nhóm input ($G_1$ và $G_2$ - các điểm trên curve), cột phải là nhóm output $G_T$ (một nhóm số trong trường mở rộng). Bilinearity nói rằng hai đường đi - "nhân scalar ở input rồi pairing" và "pairing trước rồi lũy thừa ở output" - cho cùng một kết quả. Đó là tính chất duy nhất khiến pairing hữu dụng, và nó là điểm tựa của toàn bộ BLS signature.
Có nhiều cách xây dựng pairing (Weil pairing, Tate pairing, Ate pairing, optimal Ate) và phần kỹ thuật của việc tính toán chúng là một thế giới riêng, mình sẽ không đi sâu. Điều quan trọng là: pairing chỉ tồn tại dưới dạng tính được hiệu quả trên một số rất ít curve - đa số curve elliptic "bình thường" không có pairing hiệu quả.
Một analogy mà mình thấy dễ hình dung: pairing như một loại phép nhân ma thuật giữa hai chiếc két sắt. Bạn có chiếc két $P$ và chiếc két $Q$. Bạn không biết bên trong chứa gì - chỉ người có chìa (secret key) mới mở được. Nhưng với pairing, bạn có thể "nhân" hai chiếc két lại với nhau và nhận được một vân tay mà ai cũng có thể kiểm tra, mà vẫn không biết bên trong két có gì. Vân tay này tuân theo một quy luật đại số - và chính quy luật đại số ấy cho phép xây những scheme chữ ký với tính chất không tưởng.

Embedding degree - tại sao $\omega$ lại xuất hiện ở đây
Một curve có pairing hiệu quả cần một tính chất gọi là embedding degree nhỏ (ký hiệu $k$). Nói nôm na, $k$ là cái bậc mở rộng field mà bạn cần để pairing tính được - nhỏ nghĩa là rẻ, lớn nghĩa là không chạy nổi.
Với curve "ngẫu nhiên", $k$ thường là một con số khổng lồ (cỡ $2^{160}$ hoặc hơn) - về mặt toán học pairing vẫn tồn tại, nhưng về mặt tính toán thì bạn sẽ chờ đến khi vũ trụ hết tuổi. Để có pairing dùng được, bạn cần curve với $k$ nhỏ, cỡ 6, 12, 18 hoặc 24.

Cách hình dung "tháp field": mỗi lần pairing cần làm việc, phép tính phải leo lên từ field cơ sở $\mathbb{F}p$ qua các field mở rộng ($\mathbb{F}{p^2}$, $\mathbb{F}{p^6}$, $\mathbb{F}{p^{12}}$) rồi quay về. Nếu tháp chỉ có 12 tầng, bạn leo nhanh. Nếu tháp cao $2^{160}$ tầng, bạn không bao giờ leo tới đỉnh - cho dù thuật toán có hoàn hảo. Đó là khác biệt giữa "pairing-friendly" và không.
Và đây là chỗ $\omega$ quay lại. Các curve có j-invariant bằng 0 - tức là curve dạng $y^2 = x^3 + b$ với đối xứng $\omega$ - có cấu trúc toán học đặc biệt khiến chúng dễ thiết kế với embedding degree nhỏ. Curve "phẳng" không có đối xứng $\omega$ hầu như không bao giờ pairing-friendly. Đây không phải một sự trùng hợp ngẫu nhiên - nó là hệ quả trực tiếp của lý thuyết complex multiplication mà Eisenstein và Kronecker đã xây dựng từ thế kỷ 19.
Nghe đến đây có thể bạn đã đoán ra: curve đang bảo vệ Ethereum ngay lúc này có dạng $y^2 = x^3 + 4$. Nó tên là BLS12-381:

Sean Bowe viết trong bài blog gốc của Electric Coin Company khi giới thiệu BLS12-381 năm 2017: "with an embedding degree of 12, these curves target the 128-bit security level" và "the curve we have ultimately chosen is named BLS12-381 as q ≈ 2³⁸¹". Hai con số trong tên - 12 và 381 - không ngẫu nhiên. Nguồn: electriccoin.co/blog/new-snark-curve.
- Chữ "BLS" là tên ba nhà toán học Barreto, Lynn, Scott (không phải Boneh-Lynn-Shacham - đây là sự trùng tên khá phiền phức trong crypto).
- Số "12" là embedding degree $k = 12$ - đủ nhỏ để pairing chạy được trong vài milliseconds.
- Số "381" là số bit của prime modulus, đủ lớn để chống brute force.
Curve này có dạng $y^2 = x^3 + 4$, tức j-invariant bằng 0, tức có complex multiplication by $\mathbb{Z}[\omega]$. Các nghiệm phức của $x^3 = 1$ - cái thứ mà bạn comment TikTok kia gọi là "phức tạp hóa" - là một phần cốt lõi của lý do curve này tồn tại được và có pairing hiệu quả.
Phần 5: BLS signatures và phép màu aggregation
Giờ mới đến phần thú vị nhất. BLS signature - đặt tên theo Boneh, Lynn, và Shacham, ba tác giả bài báo gốc năm 2001 "Short Signatures from the Weil Pairing" - là một scheme chữ ký số xây dựng trực tiếp trên pairing.
Cách hoạt động, tối giản
BLS signature: secret key là số nguyên $sk$, public key là điểm $pk = sk \cdot G_2$, chữ ký của message $m$ là $\sigma = sk \cdot H(m)$, verify bằng cách kiểm tra một đẳng thức pairing duy nhất $e(\sigma, G_2) = e(H(m), pk)$. Toàn bộ scheme chỉ là một phép nhân vô hướng để ký và một pairing để verify.
Setup: chọn một điểm sinh $G$ trên nhóm $G_1$, một điểm sinh khác $G_2$ trên nhóm $G_2$, và một hàm băm $H$ biến một thông điệp thành một điểm trên curve.
Tạo khóa:
- Secret key: một số nguyên ngẫu nhiên $sk$
- Public key: điểm $pk = sk \cdot G_2$
Ký thông điệp $m$:
$$\sigma = sk \cdot H(m)$$
Chỉ đơn giản vậy - một phép nhân vô hướng trên curve. Chữ ký $\sigma$ là một điểm trên curve.
Verify chữ ký (đây là phần mà pairing làm việc):
$$e(\sigma, G_2) \stackrel{?}{=} e(H(m), pk)$$
Tại sao cách verify này đúng? Thay $\sigma = sk \cdot H(m)$ và $pk = sk \cdot G_2$ vào hai vế:
- Vế trái: $e(sk \cdot H(m), G_2) = e(H(m), G_2)^{sk}$ (dùng bilinearity)
- Vế phải: $e(H(m), sk \cdot G_2) = e(H(m), G_2)^{sk}$ (dùng bilinearity)
Hai vế bằng nhau. Chỉ người biết $sk$ mới có thể tạo được $\sigma$ đúng - và bất kỳ ai cũng có thể verify bằng cách tính pairing và so sánh, mà không cần biết $sk$.

Định nghĩa scheme gốc, đúng như mình vừa mô tả bằng tiếng Việt: Key Generation sinh một số ngẫu nhiên $x$ và tính $v = g^x$; Signing lấy hash của message rồi nâng lên lũy thừa $x$; Verification kiểm tra tuple $(g, v, h, \sigma)$ có phải Diffie-Hellman tuple hay không. Nguồn: Boneh-Lynn-Shacham, Asiacrypt 2001, trang 3.
Và đây là định nghĩa formal của bilinearity - thứ mình vừa dùng trong phép chứng minh verification đúng:

Tính chất thứ hai - Bilinear - chính là cái đẳng thức $e(aR_1, bR_2) = e(R_1, R_2)^{ab}$ mà cả scheme dựa vào. Không có nó, không có pairing-based crypto. Không có pairing-based crypto, BLS signature và do đó Ethereum beacon chain như chúng ta biết không tồn tại.
Đây là toán học đẹp: bạn đang dùng tính song tuyến tính để "chuyển" secret key giữa hai bên của pairing, và phép kiểm tra trở thành một đẳng thức đại số mà chỉ đúng khi signer biết khóa thật.
Phép màu - aggregation
BLS aggregation cho phép cộng N chữ ký riêng lẻ thành một điểm duy nhất trên curve - chỉ 96 bytes bất kể N bằng 10 hay 10 triệu - và verify toàn bộ bằng đúng một pairing. Đây là lý do Ethereum beacon chain có thể xử lý vote của gần một triệu validator mà không sập dưới trọng lượng chữ ký.
Cho đến giờ, BLS chỉ trông giống một scheme chữ ký nữa (và thực ra, để sign-and-verify thuần túy, nó không nhanh hơn ECDSA). Phép màu nằm ở chỗ sau: bạn có thể cộng nhiều chữ ký lại thành một.
Giả sử có $n$ người ký cùng một thông điệp $m$, với secret keys $sk_1, sk_2, \ldots, sk_n$ và public keys tương ứng. Mỗi người tạo ra chữ ký riêng $\sigma_i = sk_i \cdot H(m)$. Ai đó gom tất cả chữ ký lại và cộng chúng trên curve:
$$\sigma_{agg} = \sigma_1 + \sigma_2 + \ldots + \sigma_n$$
Chữ ký tổng $\sigma_{agg}$ chỉ là một điểm duy nhất trên curve - cùng kích thước như một chữ ký đơn (96 bytes cho BLS12-381 group $G_2$, hoặc 48 bytes cho $G_1$). Không phải $n$ lần 96 bytes. Không phải tăng tuyến tính theo $n$. Một điểm.

Và bạn có thể verify chữ ký tổng này với một pairing duy nhất:
$$e(\sigma_{agg}, G_2) \stackrel{?}{=} e(H(m), pk_1 + pk_2 + \ldots + pk_n)$$
Public keys cũng cộng được trên curve. Verification trở thành kiểm tra một đẳng thức pairing duy nhất - bất kể có 10 chữ ký hay 10 triệu.
Tại sao Ethereum sống nhờ điều này
Ethereum chuyển sang Proof of Stake vào tháng 9 năm 2022 (The Merge), và beacon chain của nó hoạt động bằng cách mỗi slot 12 giây, một "committee" gồm các validator phải vote để attest rằng một block là hợp lệ. Theo số liệu mới nhất từ beaconcha.in tháng 4 năm 2026, hiện có khoảng 918 nghìn validator đang active trên mạng.
Giả sử mỗi slot có khoảng 30 nghìn validator cần attest (toàn bộ validators được chia thành các committee và xoay vòng). Nếu Ethereum dùng ECDSA như Bitcoin - mỗi chữ ký cỡ 64 bytes - thì mỗi slot sẽ chứa $30000 \times 64 = 1.92$ MB chỉ riêng phần chữ ký. Mỗi 12 giây. Mỗi ngày là $\approx 14$ GB chỉ để lưu chữ ký vote. Sau một năm: 5 TB. Không node nào chạy nổi. Chain sẽ chết vì chính trọng lượng của nó.
Với BLS, tất cả $30000$ chữ ký ấy được cộng thành một điểm $\sigma_{agg}$ duy nhất, 96 bytes. Verify một pairing. Gọn gàng, nhẹ tênh. Đây là một trong những quyết định thiết kế quan trọng nhất trong toàn bộ hạ tầng Ethereum sau Merge - và nó chỉ khả thi vì BLS12-381 pairing-friendly, và pairing-friendly chỉ khả thi vì curve có complex multiplication by $\omega$.
Nối lại cả chuỗi từ đầu bài cho rõ: $\omega$ - một con số phức mà bạn được dạy qua loa ở lớp 10 rồi quên ngay - đang là lý do 918 nghìn validator của Ethereum có thể đồng thuận được với nhau mỗi 12 giây, bảo vệ khoảng 400 tỉ USD tài sản tại thời điểm viết bài. Nếu xóa $\omega$ khỏi toán học, bạn không chỉ xóa một ô vuông nhỏ trong sách giáo khoa - bạn xóa cả Ethereum beacon chain.
Mình không nói quá. Đó là toán.
"Nhưng tôi cần quái gì hiểu $\omega$ để dùng BLS ?"
Mình biết có người sẽ phản đối: "OK Bình, thú vị đấy. Nhưng 99% dev dùng BLS không cần biết $\omega$ là gì. Họ import py_ecc hoặc blst, gọi sign() và verify(), xong việc. Thư viện làm hết. Kiến thức $\omega$ là luxury, không phải necessity."
Fair point. Thật sự mình đã tự nói câu này với chính mình vài lần khi đang viết bài. Nếu bạn là frontend dev dùng ví Ethereum, bạn không cần biết BLS12-381, càng không cần biết Eisenstein integers. Hàng tỉ người dùng internet mỗi ngày mà không biết TCP/IP hoạt động thế nào, và vẫn sống tốt.
Nhưng có ba loại người cần biết $\omega$:
Người thiết kế curve mới. Vài năm một lần, cryptographer cần curve mới cho một use case mới - post-quantum, zero-knowledge proof, threshold signature. Họ phải hiểu sâu về CM, embedding degree, và phép đối xứng ẩn của curve để thiết kế ra thứ an toàn. Nhóm này nhỏ nhưng quan trọng - họ là người đặt nền cho công nghệ mà mấy trăm triệu người dùng lại sử dụng.
Người audit crypto. Khi một scheme mới ra, có người phải ngồi đọc specification và chứng minh không có lỗi. Họ phải verify từng bước toán học, từng giả thiết về curve. Nếu họ không hiểu vì sao BLS12-381 có pairing được - cụ thể là hiểu complex multiplication - họ không thể chắc chắn scheme an toàn. Một cái audit rách giữa chừng có thể để lại lỗ hổng hàng trăm triệu USD. Chuyện này đã xảy ra - năm 2018, một bug trong implementation của BN256 curve (một loại curve pairing-friendly khác) khiến zk-SNARK của Zcash có thể bị forge. May mắn phát hiện trước khi bị exploit.
Người đang phá crypto. Attack trên pairing-based crypto đôi khi khai thác chính những cấu trúc đặc biệt của curve. Một số attack trên curve với CM dựa vào cấu trúc $\omega$ để tăng tốc discrete log. Nếu bạn là researcher ở NSA, IBM Research, hoặc một academic lab làm crypto, hiểu $\omega$ là điều kiện tiên quyết để đánh giá mức an toàn của một curve.
Và kể cả nếu bạn không thuộc ba nhóm trên - nếu bạn chỉ là một dev bình thường - mình nghĩ vẫn đáng để biết rằng thư viện bạn đang gọi được xây trên những viên gạch toán học nào. Không phải để dùng nó tốt hơn, mà để không coi thường thứ mình đang dùng. Đó là sự khác biệt giữa một người dùng công cụ và một người hiểu công cụ.
Chuyển đoạn - vì sao mình viết bài này
Quay lại câu chuyện ban đầu. Mình không viết bài này để dạy các bạn BLS signature - thật ra nếu bạn muốn dùng BLS, có library làm hết, bạn không cần đọc 5000 chữ. Mình viết vì cái comment TikTok kia là một ví dụ gọn và rõ cho một thói quen tư duy mà mình thấy ngày càng phổ biến: dừng suy nghĩ ngay khi có một câu trả lời đúng (nhưng không đủ).
Nghĩ thử xem: bạn tìm ra x = 1, và bạn đóng sổ. Hai nghiệm kia tồn tại hay không, bạn không quan tâm - vì câu hỏi đã được trả lời. Nhưng đây là trò chơi của não: nếu bạn làm vậy với một bài toán toán học trẻ con, bạn sẽ làm vậy với mọi thứ.
Bạn gặp một bug trong code. Bạn tìm ra một nguyên nhân có thể, fix nó, bug biến mất, bạn commit. Xong. Nhưng có khi nào bug kia có ba nguyên nhân, và bạn chỉ fix một, hai cái còn lại ~~kemeno~~ bạn không biết - vì bạn đã dừng lại ngay khi có "một câu trả lời".
Bạn học về một architecture pattern nào đó - microservices, hoặc event sourcing, hoặc RAG. Bạn đọc một bài blog, hiểu concept chính, thấy nó hay, bắt đầu áp dụng vào project của mình. Nhưng pattern ấy có ba trường hợp khác nhau mà bạn chưa gặp, và trong hai trường hợp đó nó sẽ phản chủ - bạn không biết. Vì bạn dừng ngay khi có "một cách hiểu".
Bạn nghe về một topic trending - Rust là tương lai, Kubernetes cho mọi startup, LLM sẽ thay thế lập trình viên. Bạn đọc ba cái tweet, hình thành một ý kiến, bảo vệ nó trong bữa cà phê với đồng nghiệp. Nhưng mỗi claim kia có năm cái "nếu và chỉ nếu" mà Facebooker không kể cho bạn nghe - bạn không biết. Vì bạn dừng ngay khi có "một ý kiến".
Không phải các bạn lười. Não người tiến hoá để tiết kiệm: đã có một câu trả lời đủ tốt thì dừng, dành năng lượng cho việc khác. Trong cuộc sống của tổ tiên ta ở savanna, đó là chiến lược tối ưu - bạn không cần biết tất cả các lý do một con sư tử có thể xuất hiện từ bụi cỏ, bạn chỉ cần biết một, chạy, sống. Nhưng trong thế giới kỹ thuật hiện đại, nơi hệ thống có 10 layer và bug ẩn trong layer 7, chiến lược "một câu trả lời rồi dừng" không còn đúng. Nó biến bạn thành người làm việc ở bề mặt - và bề mặt là chỗ đông người nhất, cạnh tranh nhất, và giá trị thấp nhất.
Và cả bài blog này, từ đầu tới giờ, chính là một minh hoạ dài cho điều đó. Nhìn lại đường đi: x³ = 1 → nghiệm phức $\omega$ → vành Eisenstein $\mathbb{Z}[\omega]$ → elliptic curve có complex multiplication → BLS12-381 → pairing → chữ ký aggregate → Ethereum beacon chain. Mỗi bước trong chuỗi đó là một người nào đó, ở một thời điểm nào đó, đã không dừng lại ở câu trả lời đầu tiên.
Eisenstein năm 1844 nhìn phương trình $x^2 + x + 1 = 0$ và thay vì nói "vô nghiệm thực, bỏ", ông hỏi một câu khác: vô nghiệm trên tập số nào? Nếu mình mở rộng tập số ra thì sao? Câu hỏi thứ hai đó đẻ ra cả một vành số mới - vành Eisenstein $\mathbb{Z}[\omega]$ mà chúng ta đã gặp ở phần 3. Gần 150 năm sau, Victor Miller (1986) nhìn pairing Weil - một công cụ toán học thuần tuý không ai nghĩ có ứng dụng - và hỏi: nếu mình tính được nó hiệu quả thì sao? Năm 2001, Boneh, Lynn và Shacham nhìn pairing đã tính được và hỏi: nếu mình dùng nó làm chữ ký số thì sao? Năm 2022, Ethereum nhìn BLS signature và hỏi: nếu mình aggregate cả triệu chữ ký thành một thì sao?
Mỗi mắt xích là một người từ chối đóng sổ sớm. Và nếu thiếu bất kỳ ai trong chuỗi đó, Ethereum ngày hôm nay không chạy được.
Toán học, giống như code và giống như mọi thứ kỹ thuật, thưởng cho những người không dễ dãi với kiến thức của chính mình. Những người biết rằng "tôi có một câu trả lời" không đồng nghĩa với "tôi đã xong". Những người, khi tìm ra một giải pháp, vẫn hỏi lại chính mình: có phải duy nhất không? Có cách nào khác tôi chưa thấy không? Nếu tôi đổi một giả thiết thì điều gì xảy ra?
Ở Việt Nam - và mình nghĩ cả ở nhiều nước khác - toán được dạy như đồ trang trí. Bạn học công thức, giải đề, thi xong rồi quên. Không ai kể cho bạn nghe rằng cái phương trình $x^2 + x + 1 = 0$ bạn ngồi giải trong 30 giây rồi bỏ qua thực ra là cánh cửa đầu tiên của cả một vành số Eisenstein. Và vì thầy cô cũng không được dạy như vậy, vòng luẩn quẩn tiếp tục - thế hệ này truyền lại cho thế hệ kia cái thói quen "tìm được nghiệm là đóng sách". Bài viết này, theo cách khiêm tốn nhất, đang cố làm vỡ vòng ấy một chút.
Kết
Lần tới khi bạn lướt TikTok và thấy một clip về $x^3 = 1$, hãy nhớ rằng phía sau cái nghiệm x = 1 trẻ con biết, có hai nghiệm khác - đứng ở hai góc $120°$ và $240°$ của đường tròn đơn vị - mà không có chúng, Ethereum không chạy được, một phần lớn zero-knowledge proof không tồn tại, và chúng ta không có nhiều công cụ mật mã hiện đại như đang có.
Nhưng cái mà mình muốn bạn mang theo khỏi bài này không phải là chi tiết về BLS, càng không phải cấu trúc của BLS12-381 (những thứ đó bạn có thể tra bất cứ lúc nào). Cái mình muốn bạn mang theo là một sự ngờ vực mới đối với chính câu trả lời của mình. Lần sau khi bạn giải một bài toán - trong code, trong design, trong cuộc sống - và tìm được một câu trả lời, hãy thử dừng lại một nhịp trước khi đóng tab. Hỏi: đây có phải là nghiệm duy nhất không? Có một không gian lớn hơn mà trong đó còn nghiệm khác không? Có thể bạn vẫn chọn câu trả lời đầu tiên - nhưng bạn sẽ chọn nó với con mắt mở, không phải với phản xạ "đủ rồi, đi tiếp".
Toán học không phải môn học. Nó là chỗ luyện tập nhỏ nhất, an toàn nhất, và rẻ nhất cho cái phản xạ không dừng lại ở câu trả lời đầu tiên. Và phản xạ đó - một khi hình thành - sẽ chống đỡ cho bạn trong tất cả các bài toán lớn hơn sau này. Những bài toán mà "một nghiệm" và "tất cả các nghiệm" là sự khác biệt giữa một fix bề mặt và một hiểu biết thật.
Nếu bạn đọc tới đây, cảm ơn bạn. Và nếu bạn thấy mình sai ở đâu - đặc biệt là phần complex multiplication, phần mình hồi hộp nhất khi viết - mình thật sự muốn nghe bạn cãi lại. Cãi lại cũng là một cách để mình không dừng lại ở câu trả lời đầu tiên của chính mình.

Điều tuyệt vời của work-from-any-where