Wie verschlüsselt man eine Nachricht nur mit dem öffentlichen Schlüssel von web3.eth.sign?

Ich rufe den öffentlichen Schlüssel eines Benutzerkontos mit Web3 wie folgt ab:

 web3.eth.sign(web3.eth.accounts[0], web3.sha3('test'), function (err, signature) {
          var sigtest = signature
          const util = require('ethereumjs-util');
          const sig = util.fromRpcSig(sigtest);
          const publicKey = util.ecrecover(util.sha3('test'), sig.v, sig.r, sig.s);
      });

Ich möchte dann eine Nachricht mit diesem öffentlichen Schlüssel verschlüsseln (ohne einen privaten Schlüssel des Benutzers zu haben) - Wie man eine Nachricht mit dem öffentlichen Schlüssel einer Ethereum-Adresse verschlüsselt, gibt eine Antwort, aber in diesem Beispiel wird auch ein privater Schlüssel angegeben. Wie soll das gehen?

Antworten (3)

Sie könnten diese Bibliothek ausprobieren, sie funktioniert perfekt. https://github.com/LimelabsTech/eth-ecies

Da es mit einem privaten Schlüssel entschlüsselt zu sein scheint, hätte ich nur einen öffentlichen Schlüssel zum Verschlüsseln / Entschlüsseln
Wenn Sie eine symmetrische Verschlüsselung durchführen, warum sollten Sie dafür einen öffentlichen Schlüssel verwenden?

web3.eth.signist veraltet _Metamask

statt signverwenden sendAsync:

  const signature = await new Promise((resolve, reject) => {
    web3.currentProvider.sendAsync({
      method: 'personal_sign',
      params: [web3.utils.utf8ToHex(message), address],
      from: address,
    }, (err, response) => {
      if(err) return reject(err);
      resolve(response.result);
    });
  });

Verwenden Sie dann eth-crypto

So erhalten Sie die Adresse aus der signierten Nachricht:

  const signer = EthCrypto.recover(
    signature,
    web3.eth.accounts.hashMessage(message)
  );

So erhalten Sie den öffentlichen Schlüssel aus der signierten Nachricht:

  const pubkey = EthCrypto.recoverPublicKey(
    signature,
    web3.eth.accounts.hashMessage(message)
  );

Wenn Sie im Browser wiederherstellen, durchsuchen Sie einfach eth-crypto:

  browserify node_modules/eth-crypto/dist/lib/browserify.index.js -o eth-crypto.js

Die Kryptografie mit öffentlichen Schlüsseln basiert auf einem asymmetrischen Algorithmus wie RSA.

Von einem privaten Schlüssel erhalten wir einen öffentlichen Schlüssel, um Paarschlüssel zu erhalten = (priv, pub)

Verschlüsselung als Funktion ist also RSA: K x M -> C

wobei K, M, C Räume öffentlicher Schlüssel, Nachrichten bzw. Chiffretexte sind

und rsa(pub,m)=c ist eine Instanz, die für keys=(priv,pub) spezifisch ist.

Wir haben eine entsprechende Entschlüsselungsfunktion

dRSA: K' x C -> M

wo Pr[drsa(priv,c) == m]==1

Die Schlüssel verschlüsseln also nicht.. "verschlüsselte" Funktionen (Algorithmen wie RSA) verschlüsseln..