Identidad Digital con firma

¿Hay alguna manera de firmar algunos datos directamente desde un contrato inteligente? Digamos que quiero crear un contrato inteligente, que representará mi identidad digital y quiero que tenga el método sign(). Tal vez algo como esto:

pragma solidity ^0.4.24;

contrato HIZO {

address owner;

modifier onlyOwner {
    require(msg.sender == owner);
    _;
}

constructor() public {
    owner = msg.sender;
}

function sign(string _msgToBeSigned) public onlyOwner returns (bytes32) {
    // here to sign the message
    // and here to return the signed message
}

function verify(bytes32 _signedMessage) public view returns (bool) {
    // here to verify if owner == ecrecover(..., v, r, s)
    // here to return true or false
}

}

Entonces, la pregunta es: ¿ es posible realizar estas dos acciones desde un contrato inteligente sin usar un código de cliente como web3.eth.sign()?

Gracias.

Respuestas (1)

ecrecoverfunciona más o menos como cabría esperar , pero signen realidad no tiene sentido. Todos los datos en la cadena de bloques son públicos, por lo que un contrato no puede mantener en secreto ningún tipo de clave privada.

Si pudiera dar más detalles sobre lo que está tratando de hacer (p. ej., "Quiero probar X a Y"), la gente podría sugerir otras ideas.