Categories
Blockchain

Cách lưu trữ và sử dụng Bitcoin 2: Bảo quản nóng và lạnh

4.2. Bảo quản nóng và lạnh

Như vừa đề cập, việc lưu trữ bitcoin trên máy tính của bạn cũng giống như việc bạn mang tiền trong ví hoặc túi xách tay của bạn. Đây được gọi là kho lưu trữ nóng. Thật thuận lợi nhưng cũng có phần rủi ro. Ngược lại, kho lạnh ngoại tuyến. Nó bị khóa ở đâu đó, nó không được kết nối với Internet và nó là kho lưu trữ. Vì vậy kho lạnh an toàn và đảm bảo hơn, nhưng tất nhiên không tiện lợi bằng kho nóng. Điều này tương tự như việc bạn mang một số tiền trong người nhưng hãy đặt tiền tiết kiệm trong đời của bạn vào một nơi nào đó an toàn hơn.

Để có kho lưu trữ nóng và lạnh riêng biệt, rõ ràng bạn cần phải có các khóa bí mật riêng biệt cho từng loại—nếu không, các đồng xu trong kho lạnh sẽ dễ bị tổn thương nếu kho nóng bị xâm phạm. Bạn sẽ muốn di chuyển tiền xu qua lại giữa mặt nóng và mặt lạnh, vì vậy mỗi bên sẽ cần biết địa chỉ hoặc khóa công khai của bên kia.

Kho lạnh không trực tuyến, vì vậy kho nóng và kho lạnh sẽ không thể kết nối với nhau qua bất kỳ mạng nào. Nhưng tin tốt là kho lạnh không nhất thiết phải trực tuyến để nhận tiền—vì kho nóng biết địa chỉ kho lạnh, nó có thể gửi tiền đến kho lạnh bất kỳ lúc nào. Bất cứ lúc nào nếu số tiền trong ví nóng của bạn trở nên lớn đến mức bất tiện, bạn có thể chuyển một phần trong số đó vào kho lạnh mà không khiến kho lạnh của bạn gặp rủi ro bằng cách kết nối mạng. Lần tới khi kho lạnh kết nối, nó sẽ có thể nhận từ chuỗi khối thông tin về những lần chuyển tới đó và sau đó kho lạnh sẽ có thể thao tác với những đồng tiền đó.

Nhưng có một vấn đề nhỏ với việc quản lý địa chỉ kho lạnh. Như đã đề cập trước đó, vì sự riêng tư và các lý do khác, chúng ta muốn có thể nhận từng đồng xu tại một địa chỉ riêng biệt với các khóa bí mật khác nhau. Vì vậy, khi chúng ta chuyển một đồng xu từ mặt nóng sang mặt lạnh, chúng ta muốn sử dụng một địa chỉ lạnh mới cho mục đích đó. Nhưng vì bên lạnh không online nên chúng ta phải có cách nào đó để bên nóng tìm ra những địa chỉ đó.

Giải pháp đơn giản là mặt lạnh tạo ra một loạt địa chỉ lớn cùng một lúc và gửi chúng cho mặt nóng để sử dụng hết từng địa chỉ một. Điểm hạn chế là chúng ta phải đấu nối lại bên lạnh định kỳ để chuyển thêm địa chỉ.

Ví xác định thứ bậc (Hierarchical Deterministic Wallets)

Một giải pháp hiệu quả hơn là sử dụng ví xác định thứ bậc. Nó cho phép bên lạnh sử dụng một số lượng địa chỉ cơ bản không bị giới hạn và bên nóng biết về những địa chỉ này, nhưng chỉ với một giao tiếp ngắn, một lần giữa hai bên. Nhưng nó đòi hỏi một chút thủ thuật mật mã.

Khi thảo luận về tạo khóa và chữ ký số trong Chương 1, chúng ta đã xem xét một hàm generateKeys tạo khóa công khai (đóng vai trò là địa chỉ) và khóa bí mật. Trong ví xác định thứ bậc, việc tạo khóa hoạt động theo cách khác. Thay vì tạo một địa chỉ duy nhất, chúng ta tạo cái mà chúng ta gọi là “thông tin tạo địa chỉ” (address generation info) và thay vì tạo khóa riêng tư, chúng ta tạo cái mà chúng ta gọi là “thông tin tạo khóa riêng” (private key generation info). Với thông tin tạo địa chỉ, chúng ta có thể tạo một chuỗi địa chỉ: chúng ta áp dụng một hàm tạo địa chỉ lấy thông tin tạo địa chỉ đầu vào và bất kỳ số nguyên i nào và tạo ra địa chỉ thứ ith trong chuỗi. Tương tự, chúng ta có thể tạo một chuỗi các khóa riêng bằng cách sử dụng thông tin tạo khóa riêng.

Phép thuật mật mã làm cho điều này trở nên hữu ích là đối với mọi số nguyên i, địa chỉ thứ ith và khóa bí mật thứ ith trùng khớp với nhau—nghĩa là, khóa bí mật thứ ith điều khiển và có thể được sử dụng để chi tiêu, bitcoin từ địa chỉ thứ ith, chỉ như thể cặp được tạo ra theo cách cổ điển. Vì vậy, cứ như thể chúng ta có một chuỗi các cặp khóa thông thường.

Thuộc tính mật mã quan trọng khác ở đây là bảo mật: thông tin tạo địa chỉ không làm rò rỉ bất kỳ thông tin nào về khóa riêng. Vì vậy, thật an toàn khi cung cấp thông tin tạo địa chỉ cho bất kỳ ai, để bất kỳ ai cũng có thể tạo khóa thứ ith.

Không phải tất cả các lược đồ chữ ký số đều có thể được sửa đổi để hỗ trợ tạo khóa xác định thứ bậc. Một số có thể và một số không thể, nhưng tin tốt là sơ đồ chữ ký kỹ thuật số được sử dụng bởi Bitcoin, ECDSA, hỗ trợ tạo khóa xác định phân cấp. Tức là, bên lạnh tạo ra nhiều khóa tùy ý, và bên nóng tạo ra các địa chỉ tương ứng (Hình 4.2).

Đây là cách nó hoạt động. Nhớ lại rằng thông thường khóa cá nhân ECDSA là một số ngẫu nhiên x và khóa công khai tương ứng là gx. Để tạo khóa xác định có thứ bậc, chúng ta sẽ cần hai giá trị ngẫu nhiên khác là ky:

thông tin tạo khóa riêng tư:   k, x, y

khóa cá nhân thứ ith:   xi = y + H(ki)

thông tin tạo địa chỉ:   k, gy

khóa công khai thứ ith:   gxi = gH(ki) · gy

địa chỉ thứ ith:   H(gxi)

Lược đồ này có tất cả các thuộc tính mà chúng ta muốn: mỗi bên có thể tạo chuỗi khóa của mình và các khóa tương ứng khớp với nhau (vì khóa công khai tương ứng với khóa riêng xgx). Nó có một thuộc tính khác mà chúng tôi chưa nói đến: khi bạn đưa ra các khóa công khai, các khóa đó sẽ không thể liên kết với nhau—nghĩa là, sẽ không thể suy luận rằng chúng đến từ cùng một ví . Giải pháp rơm rạ của việc để mặt lạnh tạo ra một loạt địa chỉ lớn thực sự có thuộc tính này, nhưng chúng ta phải cẩn thận để bảo quản nó trong kỹ thuật mới, bởi vì các khóa thực tế không được tạo ra một cách độc lập. Thuộc tính này rất quan trọng đối với quyền riêng tư và ẩn danh, là các chủ đề của Chương 6.

HÌNH 4.2. Lược đồ của một ví xác định phân cấp.

HÌNH 4.2. Lược đồ của một ví xác định phân cấp. Mặt lạnh tạo và lưu thông tin tạo khóa riêng và thông tin tạo địa chỉ. Nó thực hiện một lần chuyển giao thông tin sau sang mặt nóng. Mặt nóng tạo ra một địa chỉ mới tuần tự mỗi khi nó gửi tiền đến mặt lạnh. Khi mặt lạnh kết nối lại, nó tạo ra các địa chỉ một cách tuần tự và kiểm tra chuỗi khối những lần chuyển đến các địa chỉ đó cho đến khi nó đến một địa chỉ chưa nhận được bất kỳ đồng xu nào. Nó cũng có thể tạo ra các khóa riêng tư một cách tuần tự nếu nó gửi một số đồng xu trở lại mặt nóng hoặc sử dụng chúng theo cách khác.

Ở đây chúng ta có hai cấp độ bảo mật, với mặt nóng ở cấp độ thấp hơn. Nếu mặt nóng bị xâm phạm, thuộc tính hủy liên kết vừa thảo luận sẽ bị mất, nhưng các khóa riêng (và bitcoin) vẫn an toàn. Nói chung, lược đồ này hỗ trợ nhiều cấp độ bảo mật tùy ý—do đó có thuật ngữ “phân cấp”—mặc dù chúng ta chưa thảo luận chi tiết. Điều này có thể hữu ích, chẳng hạn, khi có nhiều cấp độ ủy quyền trong một công ty.

Bây giờ chúng ta hãy thảo luận về các cách khác nhau mà thông tin lạnh—cho dù một hay nhiều khoá, hay thông tin tạo khoá—có thể được lưu trữ. Cách thứ nhất là cất vào một loại thiết bị nào đó và cất thiết bị đó vào két sắt. Đó có thể là máy tính xách tay, điện thoại di động hoặc máy tính bảng hoặc ổ đĩa ngón tay cái (thumb drive). Điều quan trọng là phải tắt thiết bị và khóa nó lại, để nếu ai đó muốn lấy cắp nó, họ phải đột nhập vào kho lưu trữ đã bị khóa.

Ví não

Phương pháp thứ hai chúng ta có thể sử dụng được gọi là ví não. Phương pháp này kiểm soát quyền truy cập vào bitcoin không sử dụng gì ngoài cụm mật khẩu bí mật. Nó tránh được nhu cầu về ổ cứng, giấy hoặc bất kỳ cơ chế lưu trữ lâu dài nào khác. Đặc tính này có thể đặc biệt hữu ích trong các tình huống mà bạn có tình trạng an ninh vật lý kém (ví dụ: có thể là khi đi du lịch nước ngoài).

Bí quyết quan trọng đằng sau một chiếc ví não là có một thuật toán có thể dự đoán được để biến một cụm mật khẩu thành một khóa công khai và riêng tư. Ví dụ: bạn có thể băm cụm mật khẩu với một hàm băm phù hợp để lấy khóa riêng và được cung cấp cho khóa riêng, khóa công khai có thể được lấy theo cách chuẩn. Hơn nữa, kết hợp điều này với kỹ thuật ví xác định đã thảo luận trước đó, chúng ta có thể tạo toàn bộ chuỗi địa chỉ và khóa cá nhân từ một cụm mật khẩu, do đó cho phép một ví hoàn chỉnh.

Tuy nhiên, kẻ thù cũng có thể lấy được tất cả các khóa riêng trong ví não nếu anh ta đoán được cụm mật khẩu. Như mọi khi trong bảo mật máy tính, chúng ta phải giả định rằng đối thủ biết quy trình bạn đã sử dụng để tạo khóa và chỉ có cụm mật khẩu của bạn mới cung cấp bảo mật. Vì vậy, kẻ thù có thể thử các mật khẩu khác nhau và tạo địa chỉ bằng cách sử dụng chúng; nếu anh ta tìm thấy bất kỳ giao dịch chưa được sử dụng nào trên chuỗi khối tại bất kỳ địa chỉ nào trong số đó, anh ta có thể ngay lập tức chuyển chúng cho chính mình. Kẻ thù có thể không bao giờ biết (hoặc quan tâm) số tiền thuộc về ai và cuộc tấn công không yêu cầu phải đột nhập vào bất kỳ máy móc nào. Việc đoán mật khẩu ví não không hướng đến những người dùng cụ thể và nó không để lại dấu vết.

Hơn nữa, không giống như nhiệm vụ đoán mật khẩu email của bạn, có thể bị giới hạn tỷ lệ bởi máy chủ email của bạn (được gọi là đoán trực tuyến), với ví não, kẻ tấn công có thể tải xuống danh sách địa chỉ có số tiền chưa được quy đổi và thử nhiều cụm mật khẩu tiềm năng nhất mà anh ta có năng lực tính toán để kiểm tra. Lưu ý rằng kẻ tấn công không cần biết địa chỉ nào tương ứng với ví não. Đây được gọi là đoán ngoại tuyến (offline guessing) hoặc bẻ khóa mật khẩu (password cracking). Khó hơn nhiều khi nghĩ ra các mật khẩu dễ nhớ và không dễ bị đoán theo cách này. Một cách an toàn để tạo cụm mật khẩu là có một quy trình tự động để chọn một số 80 bit ngẫu nhiên và biến số đó thành một cụm mật khẩu theo cách mà các số khác nhau dẫn đến các cụm mật khẩu khác nhau.

Trong thực tế, cũng nên sử dụng một chức năng cố ý làm chậm để lấy khóa riêng từ cụm mật khẩu để đảm bảo rằng kẻ tấn công sẽ thử tất cả các khả năng càng lâu càng tốt. Điều này được gọi là kéo dài khóa (key stretching). Để tạo một hàm dẫn xuất khóa (key-derivation) chậm có chủ ý, chúng ta có thể lấy một hàm băm mật mã nhanh như SHA-256 và tính toán 220 lần lặp của nó, nhân khối lượng công việc của kẻ tấn công với hệ số 220. Tất nhiên, nếu chúng ta làm cho nó quá chậm, nó sẽ bắt đầu trở nên khó chịu đối với người dùng, vì thiết bị của họ phải tính toán lại chức năng này bất cứ khi nào họ muốn tiêu tiền từ ví não của họ.

Nếu một cụm mật khẩu ví não không thể truy cập được—nó đã bị quên, không được viết ra và không thể đoán được—thì số tiền đó sẽ bị mất vĩnh viễn.

Tạo cụm mật khẩu đáng nhớ

Một quy trình tạo cụm mật khẩu cung cấp khoảng 80 bit entropy là chọn một chuỗi ngẫu nhiên gồm sáu từ trong số 10.000 từ tiếng Anh phổ biến nhất (6 · log2(10000) là khoảng 80). Nhiều người thấy những ký tự này dễ ghi nhớ hơn một chuỗi ký tự ngẫu nhiên. Dưới đây là một số mật khẩu được tạo bằng phương pháp này:

worn till alloy focusing okay reducing

earth dutch fake tired dot occasions

HÌNH 4.3. Ví giấy bitcoin.

HÌNH 4.3. Ví giấy bitcoin với khóa công khai được mã hóa dưới dạng mã vạch hai chiều và ở ký hiệu base-58.

Ví giấy

Tùy chọn thứ ba được gọi là ví giấy (Hình 4.3). Chúng ta có thể in tài liệu quan trọng ra giấy và sau đó đặt tờ giấy đó vào một nơi an toàn hoặc chắc chắn khác. Rõ ràng, tính bảo mật của phương pháp này cũng tốt hay xấu như bảo mật vật lý của tờ giấy mà chúng ta đang sử dụng. Ví giấy điển hình mã hóa cả khóa công khai và khóa riêng theo hai cách: dưới dạng mã vạch hai chiều và ở ký hiệu cơ số 58. Cũng giống như ví não, việc lưu trữ một lượng nhỏ tài liệu quan trọng là đủ để tạo lại ví.

Thiết bị chống giả mạo

Cách thứ tư mà chúng ta có thể lưu trữ thông tin ngoại tuyến là đặt nó vào một số loại thiết bị chống giả mạo (tamper-resistant device). Chúng ta đặt chìa khóa vào thiết bị hoặc thiết bị tạo ra chìa khóa; một trong hai cách, thiết bị được thiết kế để không có cách nào nó xuất ra hoặc tiết lộ khóa. Thay vào đó, thiết bị sẽ ký các câu lệnh bằng khóa và làm như vậy khi chúng ta, nói, nhấn một nút hoặc cung cấp cho thiết bị một số loại mật khẩu. Một lợi thế là nếu thiết bị bị mất hoặc bị đánh cắp, chúng ta sẽ biết nó và cách duy nhất để có thể đánh cắp chìa khóa là nếu thiết bị bị đánh cắp. Điều này khác với việc lưu trữ chìa khóa của bạn trên máy tính xách tay.

Nói chung, mọi người có thể sử dụng một số kết hợp của bốn phương pháp này để bảo mật khóa của họ. Để lưu trữ nóng, và đặc biệt là lưu trữ nóng chứa số lượng lớn bitcoin, mọi người sẵn sàng làm việc chăm chỉ để đưa ra các phương án bảo mật mới để bảo vệ. Chúng ta thảo luận về một trong những chương trình nâng cao hơn này trong phần tiếp theo.

Leave a Reply

Your email address will not be published. Required fields are marked *