Proof of Reserves

Proof that your funds are safe—anytime you want.

Snapshot date

BTC icon

BTC

Reserve ratio

114.9%

Client assets

167.188,68 BTC

Kraken wallet

192.091,25 BTC

ETH icon

ETH

Reserve ratio

102%

Client assets

2.615.058,41 ETH

Kraken wallet

2.668.515,05 ETH

SOL icon

SOL

Reserve ratio

102.2%

Client assets

11.978.631,38 SOL

Kraken wallet

12.247.079,24 SOL

USDC icon

USDC

Reserve ratio

201.5%

Client assets

434.793.248,24 USDC

Kraken wallet

875.869.530,89 USDC

USDT icon

USDT

Reserve ratio

146.3%

Client assets

438.566.548,67 USDT

Kraken wallet

641.762.826,35 USDT

XRP icon

XRP

Reserve ratio

102.3%

Client assets

1.093.097.598,06 XRP

Kraken wallet

1.117.851.623,53 XRP

ADA icon

ADA

Reserve ratio

100.5%

Client assets

1.135.094.982,69 ADA

Kraken wallet

1.140.915.541,42 ADA

Verantwortlichkeit, regelmäßige Prüfungen

Bei Kraken bieten wir dir nicht nur die Möglichkeit, modernste digitale Assets zu traden, wir arbeiten auch daran, die Transparenz der Open-Source-Blockchains, auf denen sie betrieben werden, zu nutzen.

Mit unseren regelmäßigen Überprüfungen zum Nachweis von Rücklagen können Kunden mit nur wenigen Klicks in ihrem Konto überprüfen, ob ihre Guthaben durch echte Assets gedeckt sind.

Mit dem fortschrittlichen kryptografischen Buchhaltungsverfahren Nachweis von Rücklagen, das regelmäßig von vertrauenswürdigen Wirtschaftsprüfern durchgeführt wird, kannst du überprüfen, ob Kraken strenge Standards für die Rechenschaftspflicht einhält und die von alten Finanzunternehmen gebotene Transparenz übertrifft.

Frequently Asked Questions

What is Proof of Reserves?

Eine Überprüfung des Nachweis von Rücklagen (PoR) ist ein Verfahren, das von einem unabhängigen Buchhalter durchgeführt wird. Damit soll bestätigt werden, dass eine Depotbank die Assets, die sie beansprucht, im Namen ihrer Kunden hält. Dieser Prüfer erstellt einen anonymisierten Snapshot aller Guthaben und fasst sie in einem Hash-Baum zusammen (eine datenschutzfreundliche Datenstruktur, die alle Kundenguthaben zusammenfasst).

Merkle Root Hash

Von dort erhält der Wirtschaftsprüfer eine Merkle-Root, einen kryptografischen Fingerabdruck, der die Kombination dieser Guthaben zum Zeitpunkt der Erstellung des Snapshots eindeutig identifiziert.

Der Wirtschaftsprüfer sammelt dann von Kraken erstellte digitale Signaturen, die den Besitz der On-Chain-Adressen mit öffentlich überprüfbaren Guthaben belegen. Abschließend vergleicht und überprüft der Wirtschaftsprüfer, ob diese Guthaben die im Hash-Baum dargestellten Kundenguthaben übersteigen oder mit ihnen übereinstimmen und ob die Kunden-Assets daher der Kontrolle von Kraken unterliegen.

Jeder Kunde kann unabhängig überprüfen, ob sein Guthaben in das Verfahren zum Nachweis von Rücklagen einbezogen wurde, indem er ausgewählte Daten mit der Merkle-Root vergleicht. Alle an den übrigen Daten vorgenommenen Änderungen – egal wie klein sie sind, wirken sich auf die Root aus – und legen Manipulationen offen.

What does Proof of Reserves cover?

Spot-Guthaben

Die Überprüfung umfasst all deine Guthaben in den im Rahmen des Geltungsbereichs enthaltenen Assets, die zum Zeitpunkt der Erstellung des Snapshots geführt wurden. Die folgenden Assets sind zum Zeitpunkt der letzten Überprüfung Gegenstand des Geltungsbereichs: Bitcoin (BTC), Ether (ETH), Solana (SOL), USD Coin (USDC), Tether (USDT) und Ripple (XRP).

Staking-Guthaben

Wenn dir zum Zeitpunkt des Snapshots Guthaben für On-Chain-Staking zugewiesen waren, wird der Wert deines gestakten Guthabens mit deinem Spot-Guthaben zu einem einzigen Guthaben zusammengefasst.

Margin-Trading

Wenn du zu diesem Zeitpunkt Margin-Positionen hattest, würde dein Gesamtguthaben um die positiven Positionswerte angepasst werden.

Beispiel 1

Wenn du 1 BTC/USD @ 30,000 USD als Margin gekauft hast und deine Position offen ist, wird dein Reserveguthaben eine positive Anpassung deines BTC-Guthabens um +1 BTC widerspiegeln. Dein USD-Guthaben wird nicht negativ angepasst. Dein BTC-Guthaben, das unter Kraken-Verwahrung gehalten wird, beinhaltet dein BTC-Guthaben zu diesem Zeitpunkt, bereinigt um die positive Anpassung von + 1 BTC für deine Margin-Positionen. Dein USD-Asset-Guthaben bleibt gleich.

Beispiel 2

Wenn du 1 BTC/ETH @ 15 ETH als Margin verkauft hast und deine Position offen ist, wird dein Reserveguthaben eine positive Anpassung deines ETH-Guthabens um +15 ETH widerspiegeln. Dein BTC-Guthaben wird nicht negativ angepasst. Dein ETH-Guthaben, das unter Kraken-Verwahrung gehalten wird, beinhaltet dein ETH-Guthaben zu diesem Zeitpunkt, bereinigt um die positive Anpassung von + 15 ETH für deine Margin-Positionen. Dein BTC-Guthaben, das von Kraken verwahrt wird, bleibt gleich.

Hinweis: Die oben beschriebene Futures-Methode gilt ab der Überprüfung des Nachweis von Rücklagen im Mai 2023.

Futures-Guthaben

Wenn du zum Zeitpunkt der Überprüfung Guthaben in deiner Futures-Wallet hattest, existiert ein separater Datensatz zum Nachweis von Rücklagen für deine Futures-Sicherheitsguthaben. Deine Guthaben werden um nicht realisierte Gewinne und Verluste für einfach besicherte Futures-Trades berichtigt. Dies beinhaltet dieselben im Geltungsbereich enthaltenen Assets wie für Spot und Margin und wird Teil desselben Hash-Baums sein (mit einer eigenen Hash-Baum-ID). 

Beispiel 1

Wenn du 1 BTC in deiner Futures-Wallet hattest und eine mehrseitig besicherte Position in BTC Perp eröffnest, die einen unrealisierten Gewinn und Verlust von -0,1 USD hat, dann beträgt dein BTC-Guthaben, das von Kraken verwahrt wird, 0.9 BTC (dein 1 BTC wird durch den nicht realisierten Gewinn und Verlust von -0,1 BTC berichtigt).

Beispiel 2

Wenn du 1 BTC in deiner Futures-Wallet hattest und eine mehrseitig besicherte Position in BTC Perp eröffnest, die einen unrealisierten Gewinn und Verlust von -100,0 USD hat, dann beträgt dein BTC-Guthaben, das von Kraken verwahrt wird, 1 BTC (dein 1 BTC wird nicht durch die nicht realisierte Gewinn- und Verlustrechnung berichtigt, da diese in USD erfasst wird und USD nicht Gegenstand dieser Überprüfung ist).

Hinweis: Die oben beschriebene Futures-Methode gilt ab der Überprüfung des Nachweis von Rücklagen im Mai 2023. 

How do I verify that my account was included in the Proof of Reserves review?

Einfache Verifizierung

Gehe wie folgt vor, um kryptografisch zu überprüfen, ob dein Kraken-Kontoguthaben in der letzten Überprüfung des Nachweis von Rücklagen enthalten ist.

Hinweis: Diese Verifizierung spiegelt nur die Guthaben deines Kontos in den im Geltungsbereich enthaltenen Assets zum Zeitpunkt der Prüfung wider. Es wird weder nachfolgende Trades oder Transaktionen noch Guthaben in Assets widerspiegeln, die nicht im Geltungsbereich enthalten sind.

1. Melde dich in deinem Kraken-Konto an und navigiere auf der Kraken Pro-Oberfläche (pro.kraken.com) zur Seite „Nachweis von Rücklagen“ (Kontosymbol > Nachweis von Rücklagen). 

Kraken Proof of Reserves review list

2. Wähle die Registerkarte Nachweis von Rücklagen aus. Dazu gehören unsere neuesten verifizierten Reservequoten sowie Informationen, die für dein Konto spezifisch sind. Auf deinem Konto werden aktuelle Nachweise von Rücklagen angezeigt, in denen dein Kontostand überprüft wurde, einschließlich des Datums des Berichts, des Anbieters und des Umfangs der Bewertung. 

Kraken Proof of Reserves review list

3. Wähle das Datum aus und klicke auf Verifiziere dich. Hier findest du eine Bestätigung der zum Zeitpunkt der Prüfung vorhandenen Guthaben sowie eine Anleitung zur Überprüfung deiner Daten.

Kraken audit details

Mit dem externen Wirtschaftsprüfer verifizieren

  • Verwende deine Merkle-Leaf-ID: Kopiere die ersten 16 Zeichen und gib sie in die Tools des Buchhalters eines Drittanbieters ein, um dein Guthaben abzurufen und deine ID im Hash-Baum-Pfad zu überprüfen. Das Tool des Buchhalters eines Drittanbieters wird in einem separaten Fenster geöffnet. 

Hinweis: Dies ist ab den Prüfungen 2023 möglich. Für frühere Prüfungen findest du auf der Webseite unseres Partners die Verifizierungstools.

Kraken audit details

Mit Kraken verifizieren

  • Bestätige deine Datensatz-ID: Befolge die Schritte, um deine Datensatz-ID neu zu erstellen, die deine Kontodaten und die Bewertungs-ID eindeutig identifiziert (für jedes Berichtsdatum eindeutig).
  • Verifiziere deine Merkle Leaf ID: Befolge die Schritte, um deine Merkle-Leaf-ID neu zu erstellen, die dein Konto zusammen mit den zum Zeitpunkt der Überprüfung befindlichen Guthaben eindeutig identifiziert. 
  • Bestätige deine Merkle-Leaf-ID im Hash-Baum: Bestätige, dass deine ID zum Hash-Baum gehört und validiere den Pfad zum Hash-Baum, der von unserem externen Buchhalter verifiziert und von allen Kunden geteilt wird.

Hinweis: Dies ist ab den Prüfungen 2023 möglich. Für frühere Prüfungen findest du auf der Webseite unseres Partners die Verifizierungstools.

Kraken audit details
Kraken audit details
Kraken audit details

Erweiterte Verifizierung

Technisch versierte Kunden möchten möglicherweise ihren speziellen Hash-Baum-Leaf-Node-Hash unabhängig rekonstruieren und ihre Guthaben programmgesteuert im Hash-Baum nachschlagen, anstatt in den von Kraken oder einem Buchhalter von Drittanbietern bereitgestellten visuellen Tools. 

Du kannst die folgenden Überprüfungsschritte im Code ausführen:

  1. Du kannst die Generierung deiner Hash-Baum-Leaf-ID für dein Konto mit den unten beschriebenen Schritten überprüfen.  

  2. Anschließend kannst du deinen Hash-Baum-Pfad für die Leaf-ID überprüfen und den Pfad von deiner Position zum Stammknoten rekonstruieren. Wir bieten volle Transparenz und geben auch deine Geschwisterblatt-IDs an. 

Die erforderlichen Schritte (in Pseudocode), um die Datensatz-ID und Merkle-Leaf aus deinem Kontocode, deiner Kraken IBAN, deiner Bewertungs-ID und deinen Guthaben zu rekonstruieren, werden unten beschrieben. Beachte, dass die Ergebnisse von der speziellen Zeichenkettenformatierung der Guthaben und der Reihenfolge der geprüften Assets abhängig sind, wie sie auf der Seite für den Nachweis von Rücklagen angezeigt wird.

  • Datensatz-ID = SHA256(concatenate(Account Code, Kraken IIBAN, Review ID))
  • Guthaben = ""
  • Für jedes Asset:
    • Balances = concatenate(Asset, ":", AssetBalances[asset])
  • Merkle-Hash = concatenate(Record ID, “,”, Balances)
  • Merkle-Leaf = substring(SHA256(Merkle Hash), 0, 16)

Nachdem dein Merkle-Leaf identifiziert wurde, kannst du eine SHA256-Prüfung mit HEX-Werten verwenden, um den Hash-Baum-Pfad zu rekonstruieren.

Spezifische Beispiele werden auch in den folgenden Codefragmenten demonstriert. Das resultierende Merkle-Leaf ist auch in den Testdetails sichtbar, um zu bestätigen, dass du es korrekt rekonstruiert hast.

python

Python

import hashlib

# Merkle Leaf ID calculation
account_code = "8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1"
iiban = "AB12C34DEFG5KSQI"
review_id = "PR30SEP24"
record_id = hashlib.sha256((account_code + iiban + review_id).encode('utf-8')).hexdigest()

balances = "BTC:0.00093799,ETH:0.0422125592,SOL:0.0,USDC:0.0,USDT:6.72754,XRP:0.0"

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]))

#Merkle Tree Path function 
def mix(x, y):
    a = bytes.fromhex(x)
    b = bytes.fromhex(y)

    d = hashlib.sha256()
    d.update(a)
    d.update(b)
    return d.hexdigest()
rust

Rust

use sha2::{Digest, Sha256};

//Merkle Leaf ID calculation
const ACCOUNT_CODE: &str = "8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1";
const IIBAN: &str = "AB12C34DEFG5KSQI";
const REVIEW_ID: &str = "PR30SEP24";
const BALANCES: &str = "BTC:0.00093799,ETH:0.0422125592,SOL:0.0,USDC:0.0,USDT:6.72754,XRP:0.0";

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

    record_hasher.update(ACCOUNT_CODE);
    record_hasher.update(IIBAN);
    record_hasher.update(REVIEW_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]);
}

//Merkle Tree Path function
fn mix(x: &str, y: &str) -> Result<String, hex::FromHexError> {
    let mut leaves_hasher: Sha256 = Default::default();
    let a = hex::decode(x)?;
    let b = hex::decode(y)?;
    leaves_hasher.update(&a);
    leaves_hasher.update(&b);
    Ok(hex::encode(leaves_hasher.finalize()))
}

fn main() {
    println!("{}", mix("f42372aeb1be7296", "dfcced6ec3235f5e").unwrap());
    assert_eq!(
        mix("f42372aeb1be7296", "dfcced6ec3235f5e").unwrap(),
        "ad86a5ee2f21347403ce07e365530604690454fa76787e76be9d2f6efdceeabf"
    );
}
go

Go

package main

import (
	"crypto/sha256"
	"fmt"
)

//Merkle Leaf ID Calculation
func main() {

	accountCode := "8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1"
	iiban := "AB12C34DEFG5KSQI"
	reviewId := "PR30SEP24"

	secret := accountCode + iiban + reviewId

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

	balances := "BTC:0.00093799,ETH:0.0422125592,SOL:0.0,USDC:0.0,USDT:6.72754,XRP:0.0"

	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])

}

//Merkle Tree path hashing
func mix(x, y string) (string, error) {
        // Convert the hex strings to bytes
        a, err := hex.DecodeString(x)
        if err != nil {
                return "", err
        }

        b, err := hex.DecodeString(y)
        if err != nil {
                return "", err
        }

        h := sha256.New()

        h.Write(a)
        h.Write(b)

        // Get the final hash value as a byte slice
        hashed := h.Sum(nil)

        // Convert the hash to a hex string and return it
        return hex.EncodeToString(hashed), nil
}

func main() {
        result, _ := mix("f42372aeb1be7296", "dfcced6ec3235f5e")
        fmt.Println(result)
}
bash

Bash

#!/bin/bash

#Merkle Leaf ID calculation
ACCOUNT_CODE="8dc20f34da8cea8dd0f46b001694f5123ecd30d786c5eb92ad1a013703a4f8d1"
IIBAN="AB12C34DEFG5KSQI"
REVIEW_ID="PR30SEP24"
RECORD_ID=$(echo -n "${ACCOUNT_CODE}${IIBAN}${REVIEW_ID}" | sha256sum | head -c 64)
BALANCES="BTC:0.00093799,ETH:0.0422125592,SOL:0.0,USDC:0.0,USDT:6.72754,XRP:0.0"
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)"

#Merkle Tree Path function
hex_string1="f42372aeb1be7296"
hex_string2="dfcced6ec3235f5e"

# convert hex strings to binary, concatenate them and then hash
hash_result=$(echo -n "$(echo -n $hex_string1 | xxd -r -p)$(echo -n $hex_string2 | xxd -r -p)" | sha256sum | awk '{ print $1 }')

echo $hash_result

Shortcomings and future improvements

Im Interesse der Transparenz möchten wir einige der von uns festgestellten Mängel beim Verfahren zum Nachweis von Rücklagen aufzeigen.

  • Ein Nachweis von Rücklagen beinhaltet den Nachweis der Kontrolle über die On-Chain-Mittel zum Zeitpunkt der Prüfung, kann jedoch nicht den ausschließlichen Besitz von privaten Schlüsseln nachweisen, die theoretisch von einem Angreifer dupliziert worden sein könnten.
  • Das Verfahren kann keine versteckten Belastungen aufdecken oder nachweisen, dass die Mittel nicht zum Zweck des Bestehens der Prüfung geliehen wurden. Der Geldfluss ist jedoch auf der Blockchain sichtbar, da wir Transparenz über die Adressen bieten, an denen sich unsere Assets befinden. Ebenso sind seit der letzten Prüfung möglicherweise Schlüssel verloren gegangen oder Geld gestohlen worden.
  • Der Prüfer muss kompetent und unabhängig sein, um das Risiko von Doppelarbeit durch den Prüfling oder Absprachen zwischen den Parteien zu minimieren.
  • Wir versuchen, einige dieser Mängel zu beheben, indem wir für unseren Nachweis von Rücklagen eine angesehene, unabhängige Drittfirma beauftragen und diese Prüfungen in regelmäßigen Abständen durchführen. Wir bieten auch Transparenz über diese Daten direkt auf unserer Kundenplattform.