Alex bác sĩ thú y

Ngày xuất bản: 19/04/2018
Chia sẻ nó!
By Ngày xuất bản: 19/04/2018

Lớp JavaScript SecureRandom() có một lỗi trong đó và không tạo ra các khóa thực sự an toàn.

Nó liên quan đến tiền điện tử như thế nào?

Có rất nhiều sản phẩm tiền điện tử dựa trên trình duyệt Vẫn sử dụng phổ biến SecureRandom() Lớp JS. JavaScript rất phổ biến để tạo các sản phẩm dựa trên trình duyệt nhưng không thực sự tốt để sử dụng cho mục đích mã hóa. Vấn đề chính là JS không phải là ngôn ngữ an toàn về kiểu.

Loại an toàn là một chủ đề phức tạp và không có định nghĩa thống nhất nào về ngôn ngữ “an toàn kiểu” chính xác là gì, nhưng theo hầu hết mọi định nghĩa về nó, JavaScript không an toàn kiểu. Điều đó có nghĩa là JS không thực sự ngăn cản hoặc ngăn chặn các lỗi loại không được chấp nhận trong mật mã.

Kết luận là, tất cả các ví tiền điện tử được tạo bởi các công cụ JS bên trong trình duyệt đều có (và một số – vẫn còn!) các khóa có thể dự đoán đủ để bị bẻ khóa bằng cuộc tấn công vũ phu. Có, các khóa như vậy có độ dài phù hợp (về mặt mật mã) nhưng ít hơn 48 bit entropy do lỗi trong lớp JavaScript.

Sâu giải thích kỹ thuật.

Làm gì bây giờ?

Trên thực tế, nó không có nhiều việc phải làm về nó. Giống như tất cả các lỗi hay về tiền điện tử, lỗi này không hề mới chút nào - đây là Greg Maxwell gần như đang nói về nó ba năm trước (51:00 trở đi):

Vấn đề này ảnh hưởng đến bạn nếu bạn:

  • sử dụng địa chỉ tiền điện tử cũ
  • chúng được tạo bằng JavaScript, tức là, trong trình duyệt web

Có thể bị ảnh hưởng:

  • BitAddress trước năm 2013;
  • bitcoinjs trước năm 2014;
  • hiện hành phần mềm sử dụng kho lưu trữ lỗi thời từ Github.

Phải làm gì:

  • chuyển tiền của bạn ra khỏi những địa chỉ đó
  • đừng sử dụng chúng nữa

Điều này sẽ làm giảm nguy cơ khóa của bạn bị bẻ khóa nhưng nhìn chung, thông tin này sẽ khiến bạn ngừng nghĩ rằng sẽ phải mất nhiều thời gian để khóa mật mã hiện đại bị bẻ khóa. Hóa ra là nó có thể bị nứt trong một tuần.

 

Một số sự thật thú vị:

JavaScript ban đầu được gọi là LiveScript. Nó không được phát triển bởi Sun Microsystems (như Java) và không có lý do chính đáng nào để đổi tên LiveScript thành JavaScript. Điều này dẫn đến sự nhầm lẫn rằng JavaScript bằng cách nào đó có liên quan đến Java, nhưng JavaScript là một ngôn ngữ khác, nó có nhiều điểm chung với các ngôn ngữ chức năng như Lisp hoặc Lược đồ hơn là với Java.

JavaScript thực sự là một ngôn ngữ lập trình được diễn giải, cấp cao chứ không phải tập lệnh như -Kịch bản hậu tố gợi ý.