Kraken

Bằng chứng Dự trữ

Kraken Proof of Reserves

Cam kết của chúng tôi về Tính minh bạch

Tại Kraken, chúng tôi không chỉ cho phép bạn giao dịch các tài sản kỹ thuật số tiên tiến, chúng tôi đang làm việc để tận dụng tối đa tính minh bạch của các blockchain nguồn mở mà chúng hoạt động trên đó.

Các cuộc kiểm toán Bằng chứng Dự trữ thường xuyên của chúng tôi giúp khách hàng dễ dàng xác minh số dư mà họ đang nắm giữ có được hỗ trợ bằng tài sản thực hay không, tất cả chỉ với một vài cú nhấp chuột dễ dàng trong tài khoản.

Một quy trình kế toán mật mã tiên tiến được tiến hành nửa năm một lần bởi các kiểm toán viên đáng tin cậy, Bằng chứng Dự trữ cho phép bạn xác minh rằng Kraken đang đáp ứng các tiêu chuẩn khắt khe về trách nhiệm giải trình và vượt qua tính minh bạch mà các công ty tài chính kế thừa cung cấp.

Bằng chứng dự trữ là gì?

Bằng chứng dự trữ (PoR) là một cuộc kiểm toán độc lập do bên thứ ba thực hiện nhằm đảm bảo rằng người giám sát nắm giữ các tài sản mà họ tuyên bố đại diện cho khách hàng của mình. Kiểm toán viên này chụp ảnh nhanh ẩn danh của tất cả các số dư được giữ và tổng hợp chúng thành một Merkle tree - một cấu trúc dữ liệu thân thiện với quyền riêng tư bao gồm tất cả các số dư của khách hàng.

Từ đó, kiểm toán viên thu được một Merkle root: một dấu vân tay mật mã xác định một cách độc nhất sự kết hợp của các số dư này tại thời điểm tạo ảnh chụp nhanh.

Merkle Root Hash

Sau đó, kiểm toán viên sẽ thu thập các chữ ký điện tử do Kraken tạo ra, chứng minh quyền sở hữu đối với các địa chỉ trên chuỗi với số dư có thể xác minh công khai. Cuối cùng, kiểm toán viên so sánh và xác minh rằng các số dư này vượt quá hoặc khớp với các số dư của khách hàng được trình bày trong Merkle tree, và do đó tài sản của khách hàng được giữ trên cơ sở dự trữ đầy đủ.

Bất kỳ khách hàng nào cũng có thể xác minh một cách độc lập rằng số dư của họ đã được đưa vào kiểm toán Bằng chứng Dự trữ bằng cách so sánh các phần dữ liệu được chọn với Merkle root. Bất kỳ thay đổi nào được thực hiện đối với phần còn lại của dữ liệu, dù nhỏ, sẽ ảnh hưởng đến root - làm cho việc giả mạo trở nên lộ liễu.

Xác minh rằng tài khoản của bạn đã được kiểm toán

Thực hiện theo các bước bên dưới để xác minh bằng mật mã bao gồm số dư tài khoản Kraken của bạn trong Bằng chứng Dự trữ gần đây nhất.

Lưu ý: Việc xác minh này sẽ chỉ phản ánh số dư tài khoản của bạn ở các tài sản được hỗ trợ tại thời điểm kiểm tra. Nó sẽ không phản ánh bất kỳ giao dịch nào tiếp theo, cũng như sẽ không phản ánh số dư nắm giữ ở các tài sản không được kiểm toán.

1. Đăng nhập vào tài khoản Kraken của bạn và điều hướng đến cài đặt tài khoản của bạn (Cài đặt > Tài khoản).

Kraken Audits

2. Chọn tab Kiểm toán . Tài khoản của bạn sẽ hiển thị các cuộc kiểm toán gần đây, trong đó số dư tài khoản của bạn đã được xác minh, ID kiểm toán liên quan, ngày kiểm toán, tên công ty thực hiện kiểm toán và loại kiểm toán đã được tiến hành. ID đánh giá là chuỗi nhận dạng được liên kết với một cuộc đánh giá cụ thể; như Kraken dự kiến sẽ tiến hành các cuộc kiểm toán Bằng chứng Dự trữ thường xuyên, điều quan trọng là mỗi bên phải có thể nhận dạng một cách độc nhất.

Kraken audit list

3. Chọn ngày kiểm toán bạn muốn xác minh. Tại đây, bạn sẽ tìm thấy xác nhận về loại kiểm toán, ID hồ sơ của bạn (cụ thể cho tài khoản của bạn và cuộc kiểm toán cụ thể này), các tài sản đã được đề cập và số dư tài sản của bạn tại thời điểm kiểm toán.

ID Bản ghi cho phép bạn xác nhận một cách độc lập rằng số dư tài khoản của bạn đã được bao gồm, thông qua kiểm toán viên bên thứ ba.

Kraken audit details

Xác minh hồ sơ của bạn với kiểm toán viên


Đơn giản:

Cách nhanh nhất để xác minh hồ sơ tài khoản của bạn là sử dụng cổng kiểm toán của bên thứ ba với ID hồ sơ của bạn:

1. Sao chép ID Bản ghi tương ứng với tài khoản của bạn và kiểm toán được chỉ định (tham khảo phần trước để xác định vị trí này).

2. Truy cập trang web của kiểm toán viên bên thứ ba chịu trách nhiệm về việc kiểm toán Bằng chứng Dự trữ.

3. Nhập ID Bản ghi của bạn vào cổng thông tin của kiểm toán viên bên thứ ba. Trang web của kiểm toán viên sẽ sử dụng ID này để tìm hồ sơ về tiền điện tử được giữ trong tài khoản của bạn trên chuỗi tại thời điểm kiểm tra.

4. Xác minh số dư của bạn.

Nâng cao:

Khách hàng hiểu biết về công nghệ có thể muốn xây dựng lại một cách độc lập hàm băm Merkle Tree leaf node cụ thể của họ và tra cứu số dư của họ trong công cụ kiểm toán của bên thứ ba bằng cách sử dụng hàm băm này, thay vì chỉ ID Bản ghi.

Điều này cho phép khách hàng xác minh rằng ID Bản ghi của họ (cũng như các số dư liên quan trong tài khoản của họ tại thời điểm kiểm tra) đã được bao gồm trong cấu trúc Merkle Tree, dẫn đến Root Hash được công bố bởi kiểm toán viên:

1. Chi tiết kiểm tra trên kraken.com cũng bao gồm "Mã tài khoản", một mã khác độc nhất cho tài khoản của bạn và kiểm toán cụ thể này, giúp tránh sử dụng lại bất kỳ mã nhận dạng nào trong các cuộc kiểm tra.

2. Bạn cũng sẽ thấy Merkle Hash mà bạn có thể sử dụng trực tiếp hoặc tạo lại (mỗi bên dưới) bằng cách sử dụng chi tiết tài khoản của bạn và kiểm toán cụ thể. Merkle Leaf mà bạn sẽ sử dụng để tra cứu trên công cụ kiểm toán là 16 ký tự đầu tiên của SHA256 của Merkle Hash này.

3. Các bước cần thiết, trong mã giả, để tạo lại ID bản ghi và Merkle Leaf từ Mã tài khoản, Kraken IIBAN, ID kiểm tra và số dư của bạn được nêu dưới đây. Lưu ý rằng kết quả nhạy cảm với định dạng chuỗi cụ thể của số dư, như được hiển thị trên trang Kiểm toán.

  • Record ID = SHA256(concatenate(Account Code, Kraken IIBAN, Audit ID))
  • Balances = concatenate(“BTC:”, balBTC)
  • Balances = concatenate(Balances, “,BTC.M:”, balBTCM)
  • Balances = concatenate(Balances, “,ETH:”, balETH)
  • Balances = concatenate(Balances, “,ETH2.S:”, balETH2S)
  • Merkle Hash = concatenate(Record ID, “,”, Balances)
  • Merkle Leaf = substring(SHA256(Merkle Hash), 0, 16)

Các ví dụ cụ thể cũng được minh họa trong các đoạn mã bên dưới. Kết quả Merkle Leaf cũng hiển thị trên chi tiết kiểm tra để giúp xác nhận rằng bạn đã tạo lại điều này một cách chính xác.

python

Python

import hashlib

account_code = "3a3699228240e9cda84074d3a73c9913bc591c66a431e4df7b78fbd78171a5db"
iiban = "AA45N84GGNZ6ZZAA"
audit_id = "PR30SEP21"
record_id = hashlib.sha256(
    (account_code + iiban + audit_id).encode('utf-8')).hexdigest()

balances = "BTC:1.2342525178,BTC.M:0.0,ETH:10.98200001,ETH2.S:5.4"

print("Record ID: {}".format(record_id))
print("Merkle Hash: {}".format((record_id + "," + balances)))
hash_result = hashlib.sha256(
    (record_id + "," + balances).encode('utf-8')).hexdigest()
print("SHA Result:  {}".format(hash_result))
print("Merkle Leaf: {}".format(hash_result[0:16]))
rust

Rust

use sha2::{Digest, Sha256};

const ACCOUNT_CODE: &str = "3a3699228240e9cda84074d3a73c9913bc591c66a431e4df7b78fbd78171a5db";
const IIBAN: &str = "AA45N84GGNZ6ZZAA";
const AUDIT_ID: &str = "PR30SEP21";
const BALANCES: &str = "BTC:1.2342525178,BTC.M:0.0,ETH:10.98200001,ETH2.S:5.4";

fn main() {
    let mut record_hasher: Sha256 = Default::default();

    record_hasher.update(ACCOUNT_CODE);
    record_hasher.update(IIBAN);
    record_hasher.update(AUDIT_ID);

    let record_id = format!("{:x}", record_hasher.finalize());
    let merkle_hash = format!("{},{}", record_id, BALANCES);

    let mut merkle_hasher: Sha256 = Default::default();
    merkle_hasher.update(&merkle_hash);
    let merkle_result = format!("{:x}", merkle_hasher.finalize());

    println!("Record ID: {}", record_id);
    println!("Merkle Hash: {}", merkle_hash);
    println!("SHA Result: {}", merkle_result);
    println!("Merkle Leaf: {}", &merkle_result[..16]);
}
go

Go

package main

import (
	"crypto/sha256"
	"fmt"
)

func main() {

	accountCode := "3a3699228240e9cda84074d3a73c9913bc591c66a431e4df7b78fbd78171a5db"
	iiban := "AA45N84GGNZ6ZZAA"
	auditId := "PR30SEP21"

	secret := accountCode + iiban + auditId

	data := []byte(secret)
	hash := sha256.Sum256(data)
	recordId := string(hash[:])
	fmt.Printf("Record ID: %x\n", recordId)

	balances := "BTC:1.2342525178,BTC.M:0.0,ETH:10.98200001,ETH2.S:5.4"

	merkleHash := fmt.Sprintf("%x%s%s", recordId, ",", balances)
	fmt.Printf("Merkle Hash: %s\n", merkleHash)

	hashResult := sha256.Sum256([]byte(merkleHash))
	hashResultStr := string(hashResult[:])
	fmt.Printf("SHA Result: %x\n", hashResultStr)
	fmt.Printf("Merkle Leaf: %x\n", hashResultStr[0:8])

}
bash

Bash

#!/bin/bash

ACCOUNT_CODE="3a3699228240e9cda84074d3a73c9913bc591c66a431e4df7b78fbd78171a5db"
IIBAN="AA45N84GGNZ6ZZAA"
AUDIT_ID="PR30SEP21"
RECORD_ID=$(echo -n "${ACCOUNT_CODE}${IIBAN}${AUDIT_ID}" | sha256sum | head -c 64)
BALANCES="BTC:1.2342525178,BTC.M:0.0,ETH:10.98200001,ETH2.S:5.4"
MERKLE_HASH="${RECORD_ID},${BALANCES}"
HASH_RESULT=$(echo -n ${MERKLE_HASH} | sha256sum | head -c 64)

echo "Record ID: ${RECORD_ID}"
echo "Merkle Hash: ${MERKLE_HASH}"
echo "SHA Result: ${HASH_RESULT}"
echo "Merkle Leaf: $(echo -n ${HASH_RESULT} | head -c 16)"

Những thiếu sót và cải tiến trong tương lai

Vì lợi ích của việc nâng cao tính minh bạch, chúng tôi muốn chia sẻ một số thiếu sót trong quy trình Bằng chứng Dự trữ mà chúng tôi đã xác định được.

  • Bằng chứng Dự trữ liên quan đến việc chứng minh quyền kiểm soát đối với các quỹ trên chuỗi tại thời điểm kiểm toán, nhưng không thể chứng minh quyền sở hữu độc quyền các khóa riêng tư mà về mặt lý thuyết có thể đã bị sao chép bởi kẻ tấn công.
  • Quy trình này không thể xác định bất kỳ rào cản ẩn hoặc chứng minh rằng các khoản tiền không được vay cho các mục đích vượt qua kiểm toán. Tương tự, các khóa có thể đã bị mất hoặc tiền bị đánh cắp kể từ lần kiểm toán gần đây nhất.
  • Kiểm toán viên phải có năng lực và độc lập để giảm thiểu rủi ro về sự trùng lặp của bên được kiểm toán hoặc sự thông đồng giữa các bên.

Chúng tôi tìm cách giảm thiểu một số thiếu sót này bằng cách hợp tác với các công ty bên thứ ba độc lập, được tôn trọng để cung cấp Bằng chứng Dự trữ của chúng tôi và tiến hành các cuộc kiểm toán này một cách thường xuyên.

*Lưu ý: Không có quy tắc được chấp nhận chính thức nào của thủ tục xác định việc kiểm toán bằng chứng dự trữ. Đối với chúng tôi, chúng tôi đã thuê một công ty kế toán độc lập để thực hiện cam kết chứng thực theo các tiêu chuẩn do Viện Kế toán Công chứng Hoa Kỳ đưa ra và phát hành Báo cáo của Kế toán Độc lập về các Thủ tục đã Thỏa thuận. Các báo cáo này bao gồm các thủ tục cụ thể do công ty đó thực hiện cũng như các phát hiện của họ.

Bằng chứng Dự trữ