Keccak256 de msg.sender et timestamp: quelle est la probabilité d’une coïncidence de sortie?

cAos

Keccak256 de msg.sender et timestamp: quelle est la probabilité d’une coïncidence de sortie?


Pensons à ce code:

 function publishEtherBox (bytes32 _label, string _ownerUrl, uint _lifespan) external onlyWhenRunning() payable { require(ownerToEtherBoxes[msg.sender].length < 10); assert(bytes(_ownerUrl).length <= 200); address etherBoxAddress = address(keccak256(msg.sender, now)); ownerToEtherBoxes[msg.sender].push(etherBoxAddress); etherBoxes[etherBoxAddress] = EtherBox({ label: _label, owner: msg.sender, ownerUrl: _ownerUrl, expiration: now + _lifespan }); emit EtherBoxPublished(msg.sender, nicknames[msg.sender], etherBoxAddress, _label, now); if(msg.value > 0){ owner.transfer(msg.value); } } 

en se référant à la 4ème ligne, il est évident que cela pourrait conduire à une coïncidence de sortie si plusieurs transactions du même msg.sender sont emballées dans le même bloc sur le même horodatage. Comment éviter cela et quelles sont les chances d’obtenir le même comportement en utilisant un nonce progressif au lieu de maintenant?

Réponses


 smarx

Si le même compte appelle cette fonction deux fois dans le même bloc, il y a 100% de keccak256(msg.sender, now) que keccak256(msg.sender, now) renvoie la même valeur.

Si vous hachez un nonce qui augmente à chaque publishEtherBox , les chances d’une collision sont d’environ 0%. Vous prenez 20 octets de la sortie de hachage, ce que Ethereum utilise lui-même pour générer des comptes. Le calcul montre qu’il est presque impossible de générer un compte en double, et donc il est presque impossible que votre etherBoxAddress soit un doublon si vous utilisez un nonce.

cAos

pouvez-vous penser d’une autre manière qu’un pirate pourrait exécuter pour prendre en charge une structure EtherBox? ici c’est le code entier: etherscan.io/address/…

smarx

Je facture ~ 500 $ / heure pour effectuer des audits de sécurité.

cAos

Je construis le contrat juste pour le plaisir, je ne pense pas que ce soit un bon investissement en ce moment. Mais merci pour la réponse

 

‘msg.sender’, «timestamp», #de, #et, #la, coïncidence?, d’une, est, keccak256, Probabilité, quelle, sortie

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *