Nghĩa của lược đồ EC-Schnorr-M trong việc chống lại tấn công lặp

Một phần của tài liệu Nghiên cứu một số giải pháp đảm bảo an toàn và hiệu quả cho lược đồ chữ ký số kiểu ECSchnorr. (Trang 110 - 117)

lặp khóa bí mật

a) Mô tả tấn công Rowhammer

Tấn công Rowhammer là một kỹ thuật tấn công cho phép kẻ tấn công sửa đổi dữ liệu trong bộ nhớ mà không cần truy cập đến nó. Bản chất của tấn công Rowhammer là sử dụng mã phần mềm để tạo ra lỗi vào phần cứng theo cách có thể kiểm soát được. Cụ thể là gây ra việc "lật bit" bằng cách truy cập nhanh và liên tục vào dữ liệu trong một hàng bộ nhớ trên chip RAM để tạo ra điện tích làm thay đổi dữ liệu được lưu trữ ở các địa chỉ khác trong "hàng bộ nhớ". Các hàng bộ nhớ tấn công được gọi là "hàng xâm lược" và hàng nơi xảy ra lật bit được gọi là "hàng nạn nhân".

Trong công trình “Flipping Bits in Memory Without Accessing Them: An Experimental Study of DRAM Disturbance Errors” của nhóm tác giả Yoongu Kim đã chứng minh rằng, bằng cách liên tục truy cập vào hai vị trí bộ nhớ “hàng xâm lược” trong không gian địa chỉ ảo của một tiến trình, có thể gây ra sự thay đổi bit ở vị trí “hàng nạn nhân” thứ ba. Điều này có thể thực hiện được vì các tế bào DRAM ngày càng nhỏ và sát nhau hơn, làm cho việc ngăn chặn các tế bào DRAM tương tác điện với nhau trở nên khó khăn hơn. Do đó, việc truy cập vào một vị trí trong bộ nhớ có thể làm xáo trộn các vị trí

lân cận, khiến điện tích bị rò rỉ vào hoặc ra khỏi các ô nhớ lân cận, điều này có thể thay đổi giá trị của ô từ 1 thành 0 hoặc ngược lại. Hiện tượng lật bit được tạo ra bằng cách sử dụng đoạn mã nhỏ sau đây:

Quy trình gây ra hiện tượng lật bit được giải thích gồm hai công đoạn sau đây:

- Lựa chọn địa chỉ: Để code1a gây ra hiện tượng lật bit, địa chỉ X và Y phải ánh xạ tới các hàng DRAM khác nhau trong cùng một khối. Mỗi chip DRAM chứa nhiều hàng ô. Truy cập một byte trong bộ nhớ bao gồm việc chuyển dữ liệu từ hàng vào “bộ đệm hàng” của chip (xả các ô của hàng trong quá trình này), đọc hoặc ghi nội dung của bộ đệm hàng, sau đó sao chép nội dung của bộ đệm hàng trở lại các ô của hàng ban đầu (sạc lại các tế bào).

Chính quá trình “kích hoạt” một hàng (xả và sạc lại) có thể làm xáo trộn các hàng liền kề. Nếu điều này được thực hiện đủ số lần, giữa các lần tự động làm mới các hàng liền kề (thường xảy ra sau mỗi 64ms), điều này có thể gây ra hiện tượng lật bit trong các hàng liền kề.

Bộ đệm hàng hoạt động như một bộ đệm, vì vậy nếu địa chỉ X và Y trỏ đến cùng một hàng, thì code1a sẽ chỉ đọc từ bộ đệm hàng mà không kích hoạt hàng liên tục. Hơn nữa, mỗi khối DRAM có khái niệm riêng về “hàng hiện đang được kích hoạt”. Vì vậy, nếu địa chỉ X và Y trỏ đến các khối khác nhau, code1a sẽ chỉ đọc từ bộ đệm hàng của các khối đó mà không kích hoạt các hàng liên tục. Tuy nhiên, nếu X và Y trỏ đến các hàng khác nhau trong cùng một giàn, code1a sẽ khiến các hàng của X và Y được kích hoạt nhiều lần. Đây được gọi là "Rowhammer".

- Bỏ qua bộ đệm: Không có lệnh CLFLUSH của code1a , các lần đọc bộ nhớ (MOV) sẽ được phân phát từ bộ đệm của CPU. Việc xóa bộ nhớ cache bằng CLFLUSH buộc các truy cập bộ nhớ được gửi đến DRAM bên dưới, điều này cần thiết để làm cho các hàng được kích hoạt nhiều lần.

Trong nhiều năm kể từ khi cuộc tấn công Rowhammer đầu tiên được phát hiện, các nhà nghiên cứu đã chứng minh nhiều cách sử dụng kỹ thuật này để thay đổi dữ liệu được lưu trữ trên thẻ RAM, bao gồm cả thế hệ DDR3 và DDR4. Mặc dù ban đầu giới hạn trong các tình huống mà kẻ tấn công có quyền truy cập vật lý vào mục tiêu, các nhà nghiên cứu cuối cùng cho thấy một cuộc tấn công Rowhammer có thể được thực hiện từ xa thông qua web và sử dụng kỹ thuật này để giành quyền kiểm soát máy ảo Linux trên đám mây.

Như các nhà nghiên cứu của Google Project Zero đã giải thích vào năm 2015, tấn công Rowhammer ngày càng khả thi và hiệu quả vì các tế bào DRAM đang dần trở nên nhỏ và sát nhau hơn. Việc thu nhỏ và khả năng đóng gói nhiều dung lượng bộ nhớ hơn đã làm cho việc ngăn chặn các tế bào DRAM tương tác điện với nhau trở nên khó khăn hơn.

"Rowhammer là một hiện tượng ghép điện trong silicon của chính nó, cho phép bỏ qua tiềm năng của các chính sách bảo vệ phần cứng và bộ nhớ phần mềm. Điều này có thể cho phép thực thi các đoạn mã không tin cậy để thoát ra khỏi sandbox của nó và nắm quyền kiểm soát toàn bộ hệ thống" phát biểu từ nhóm nghiên cứu của Google (Yoongu Kim và các cộng sự). Yoongu Kim hiện là kỹ sư phần mềm tại Google, là một trong những nhà nghiên cứu đã báo cáo lỗ hổng Rowhammer đầu tiên. Tấn công này còn được mở rộng thành “Half-Double”, có thể gây ra các cú lộn bit ở khoảng cách của một hàng DRAM. Half-Double hiển thị các “hàng kẻ xâm lược” có thể gây ra hiện tượng lộn xộn trên các “hàng nạn nhân” ở xa nhau hơn. Nhóm nghiên cứu lưu ý rằng "Với Half-Double, chúng tôi đã quan sát thấy hiệu ứng Rowhammer

lan truyền đến các hàng bên ngoài các hàng liền kề, mặc dù sức mạnh bị giảm. Với ba hàng A, B và C liên tiếp, chúng tôi có thể tấn công C bằng cách hướng một số lượng rất lớn các quyền truy cập đến A, cùng với chỉ một số ít lượng quyền truy cập đến B. Dựa trên các thử nghiệm của chúng tôi, các quyền truy cập vào B có một hiệu ứng phi tuyến tính, trong khi đó chúng dường như vận chuyển hiệu ứng Rowhammer của A lên C".

b) Đối với một số bộ sinh số ngẫu nhiên tồi

Các bộ tạo số ngẫu nhiên có thể chia làm 2 loại chính: các bộ tạo số giả ngẫu nhiên (pseudo-random number generator -PRNG) và các bộ tạo số ngẫu nhiên thực sự (true-random number generator - TRNG).

TRNGs là các cơ chế không tất định và có thể chia làm 2 loại dựa trên nguồn nhiễu mà nó sử dụng: TRNG vật lý và TRNG phi-vật lý. TRNG vật lý sử dụng các nguồn nhiễu vật lý cho bởi phần cứng chuyên dụng, chẳng hạn như đi-ốt nhiễu, dao động tự do, phân rã phóng xạ, hiệu ứng photon lượng tử,… Trong khi, TRNG phi-vật lý sử dụng các nguồn nhiễu phi-vật lý chẳng hạn như dữ liệu hệ thống như các đầu ra của các hàm API, dữ liệu RAM hoặc thời gian hệ thống, hoặc thao tác bàn phím, di chuyển chuột, chạm màn hình.

PRNGs là các cơ chế tất định tạo ra một chuỗi các số “có dạng ngẫu nhiên”. Tuy nhiên, với cùng một đầu vào cho trước thì một PRNG sẽ luôn tạo ra cùng một đầu ra. Một số PRNG an toàn đã được chuẩn hoá bởi NIST và ISO là Hash-DRBG, CTR-DRBG, HMAC-DRBG [8].

Ngoài ra còn có một số bộ tạo số giả ngẫu nhiên khác, như bộ tạo đồng dư tuyến tính; bộ tạo đồng dư bậc 2, bậc 3; bộ tạo luỹ thừa modular; bộ tạo Blum-Blum-Shub; bộ tạo Micali-Schnorr.

Mặc dù nhiều bộ tạo số giả ngẫu nhiên đã được chứng minh an toàn về mặt lý thuyết, nhưng trong thực tế vẫn xuất hiện các tấn công lên các bộ tạo

này và dẫn đến phá vỡ các hệ mật sử dụng bộ tạo đó. Đa phần các tấn công thực tế là do lỗi cài đặt hoặc do kẻ tấn công cố tình gây lỗi lên bộ tạo. Đối với các lỗi cài đặt, việc thử nghiệm và đánh giá chặt chẽ có thể phát hiện được các lỗi này. Tuy nhiên, với các lỗi do kẻ tấn công cố tình gây lỗi (ví dụ các tấn công kênh kề lên các mạch phần cứng) lên thiết bị thì người thiết kế rất khó kiểm soát do sự phát triển nhanh chóng về năng lực tính toán.

Do đó, vấn đề dùng lặp lại khóa bí mật tức thời, hoặc nhiều khóa bí mật tức thời có tính chất đặc biệt là chứa các dãy bit lặp lại giống nhau do bộ tạo số giả ngẫu nhiên là hoàn toàn có thể xảy ra. Để thấy được ý nghĩa thực tiễn của việc nghiên cứu đề xuất lược đồ chữ ký số EC-Schnorr-M trong việc chống lại tấn công sử dụng khóa bí mật bị lặp lại, chúng ta xem xét một số tấn công thực tế sau đây đối với các bộ sinh số ngẫu nhiên mà phá vỡ độ an toàn của hệ mật được sử dụng.

Bộ sinh số ngẫu nhiên trong thư viện mật mã OpenSSL

Năm 2008, Bello đã khám phá ra rằng bộ sinh số ngẫu nhiên trong OpenSSL trên hệ điều hành Debian là có thể dự đoán. Lỗ hổng này là do một gói dữ liệu được cập nhật năm 2006 bởi một nhà thiết kế của Debian. Nhà thiết kế đó đã bỏ đi một phần code được sử dụng trong quá trình sinh mầm của bộ tạo số ngẫu nhiên. Bello sau đó đã phát hiện ra rằng phần code mà người lập trình đã bỏ đi là quan trọng đối với độ an toàn của hệ mật bởi vì nó chịu trách nhiệm xáo trộn dữ liệu ngẫu nhiên vào mầm. Điều này dẫn đến mầm sinh ngẫu nhiên trong OpenSSL là duy nhất dựa trên ID của quá trình đang xử lý, mà có tối đa 32768 khả năng mặc định bởi nền tảng Linux. Với chỉ 32768 mầm có thể, có nghĩa là mầm có thể dự đoán dễ dàng hơn và một cấu trúc OpenSSL bất kỳ mà sử dụng bộ sinh số ngẫu nhiên này sẽ trở nên dễ bị tổn thương bởi các tấn công.

Khoá yếu trong các thiết bị mạng

Năm 2012, một lỗ hổng nghiêm trọng trong việc sinh ngẫu nhiên trên hệ điều hành Linux đã dẫn đến một số lượng lớn các chứng chỉ TLS và các khoá SSH trở nên dễ dàng phân tích và do đó chúng bị thoả hiệp. Các nhà nghiên cứu chỉ ra rằng một số khoá bí mật của RSA có thể khôi phục được do các vấn đề về entropy thấp.

Lỗ hổng trong hệ thống chức thực số công dân Đài Loan

Trong hội nghị Asiacrypt 2013, Bernstein cùng đồng sự đã chỉ ra rằng các thẻ căn cước thông minh được cấp bởi chính phủ Đài Loan có lỗ hổng. Nghiên cứu cũng liên quan đến các khoá bí mật có độ an toàn entropy thấp. Các nhà nghiên cứu đã đánh giá 2 triệu khoá RSA 1024-bit từ cơ sở dữ liệu “chứng minh nhân dân số” của Đài Loan và thấy rằng 184 các khoá trong đó bị phân tích dễ dàng trong vài giờ. Họ cho rằng các khoá RSA yếu đó là do một lỗ hổng nghiệm trọng trong bộ sinh số ngẫu nhiên phần cứng. Tính ngẫu nhiên được sử dụng cho việc sinh khoá RSA chứa không đủ entropy và đã tạo ra các mẫu có thể dự đoán và các số nguyên tố RSA chung có thể dự đoán. Các thẻ thông minh bị tấn công theo cách này trên một phạm vi lớn đã có một tác động mạnh lên xã hội Đài Loan thời điểm đó.

Lỗi sinh số ngẫu nhiên đối với ví Bitcoin trên Android

Năm 2013, một mối nguy hiểm đã được phát hiện trong thư viện Java java.security, trong lớp SecureRandom. Lỗ hổng này là do SecureRandom có các giá trị va chạm, và dẫn đến nó có thể tạo ra cùng một đầu ra 2 lần (hiện tượng lặp khóa). Điều này có nghĩa là SecureRandom có một lỗ hổng entropy lớn vì đầu ra trở nên có thể dự đoán. Vì điều này, các thuật toán dựa trên SecureRandom để tạo khoá hoặc các thành phần ngẫu nhiên mật mã khác cũng bị thoả hiệp.

Một trong các thuật toán phụ thuộc đó là ví Bitcoin Android. Ví Bitcoin Android sử dụng thuật toán ký số ECDSA để ký các giao dịch Bitcoin, thuật toán này sử dụng lớp SecureRandom Java trên các thiết bị Android để tạo một số ngẫu nhiên cho mỗi chữ ký. Vì lỗ hổng này, cùng một số ngẫu nhiên có thể được tạo ra để dùng cho 2 chữ ký khác nhau. Khi đó, kẻ tấn công có thể dễ dàng khôi phục khoá bí mật của lược đồ. Sử dụng khoá bí mật đó, một kẻ tấn công có thể ký một giao dịch bất kỳ và do đó đánh cắp Bitcoin từ ví Bitcoin bị ảnh hưởng.

Mối nguy hiểm này có một tác động lớn bởi vì tất cả các người dùng Android với Bitcoin được lưu trữ trên thiết bị Android sẽ gặp rủi ro trong việc bị đánh cắp Bitcoin bởi các kẻ tấn công khai thác lỗ hổng này. Sau khi mối nguy hiểm này được phát hiện, Google và Bitcoin đã cập nhật bản vá an toàn để chữa lỗi này. Sau khi sửa chữa, cài đặt ví Bitcoin Android sử dụng

/dev/urandom để sinh trực tiếp số ngẫu nhiên cho các chữ ký của chúng, thay vì sử dụng lớp SecureRandom của Java.

NSA cài đặt backdoor trong chuẩn sinh số ngẫu nhiên

Năm 2013, bộ sinh số ngẫu tất định dựa trên đường cong elliptic Dual_EC_DRBG mà được chấp nhận là một tiêu chuẩn quốc gia NIST SP 800-90A do ảnh hưởng của NSA, đã bị cộng đồng mật mã phản đối vì phát hiện tồn tại một điểm yếu cố ý trong thuật toán cũng như các đường cong elliptic được NIST đề nghị. Dựa trên các tài liệu rò rỉ từ Edward Snowden, bộ sinh số ngẫu nhiên Dual_EC_DRBG trong chuẩn SP 800-90A chính xác là "một bẫy bí mật của NSA", cũng như về sự an toàn của các đường cong elliptic do NIST đề nghị trong chuẩn của NIST. Chẳng hạn:

- NIST P-256: Có đường cong xoắn là hơi yếu, độ an toàn 2121. - NIST P-256: Có đường cong xoắn rất yếu, độ an toàn chỉ là 259.

Hơn nữa, có thể tồn tại các đường cong yếu mà ta chưa biết trong số các chuẩn do NIST đề xuất, một vài đường cong yếu ở dạng �2 = �3 − + 33 3333333333333 �.

Một phần của tài liệu Nghiên cứu một số giải pháp đảm bảo an toàn và hiệu quả cho lược đồ chữ ký số kiểu ECSchnorr. (Trang 110 - 117)

Tải bản đầy đủ (DOC)

(131 trang)
w