PageRenderTime 1526ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/pages/ecc/ecc.html

https://gitlab.com/YukiteruAmano/simulador-criptografico
HTML | 232 lines | 208 code | 24 blank | 0 comment | 0 complexity | 0c51c993682431e20673191b652adf78 MD5 | raw file
  1. <h1>Criptografía de Curva Eliptica (ECC) / ECDSA</h1>
  2. <div class="panel panel-default">
  3. <div class="panel-heading">
  4. <h4 class="panel-title">
  5. <a ng-click="vm.showExplanation = !vm.showExplanation">Explicación</a>
  6. </h4>
  7. </div>
  8. <div class="panel-collapse collapse" ng-class="{in: vm.showExplanation}">
  9. <div class="panel-body">
  10. El algoritmo ECDSA funciona mediante un mecanismo de criptografía llamado, criptografía asimétrica.
  11. Este sistema de firmado, genera dos claves que reciben el nombre de clave privada y clave pública.
  12. Ambas claves están relacionadas por una compleja operación matemática realizada sobre una función de curva elíptica.
  13. <br><br>Bajo este esquema de funcionamiento, ECDSA garantiza en primera instancia lo siguiente:
  14. <ul>
  15. <li>Firmas únicas e irrepetibles para cada conjunto de generación de claves privadas y públicas.</li>
  16. <li>La imposibilidad práctica de falsificar las firmas digitales. Esto es así porque la potencia computacional necesaria para ello, está fuera de los límites actuales.</li>
  17. <li>Gracias a estas dos características, ECDSA se considera un estándar seguro para desplegar sistemas de firmas digitales. </li>
  18. </ul>
  19. <h3>Más info:</h3>
  20. <ul>
  21. <li><a href="https://academy.bit2me.com/que-es-ecdsa-curva-eliptica/"> Bit2Me Academy - ¿Qué es el algoritmo de firma ECDSA?</a></li>
  22. <li><a href="https://bitcoinjs.org/">BitcoinJS</a></li>
  23. </ul>
  24. </div>
  25. </div>
  26. </div>
  27. <div class="alert alert-warning">
  28. <strong>Advertencia</strong>: No use las claves generadas por este simulador en un monedero real, ya que existe el riesgo de que estas puedan romperse, debido a la baja entropía.
  29. </div>
  30. <h4>Par de claves de Curva Elíptica (ECC)</h4>
  31. <div class="well">
  32. <form class="form-horizontal">
  33. <div class="form-group">
  34. <label class="col-sm-4 control-label">Clave privada (decimal):</label>
  35. <div class="col-sm-8 input-group">
  36. <input class="form-control" ng-readonly="true" value="{{vm.privKeyDecimal.toString('10')}}">
  37. <span class="input-group-btn">
  38. <button class="btn btn-primary" ng-click="vm.newPrivateKey()">Generar nueva</button>
  39. </span>
  40. </div>
  41. </div>
  42. <div class="form-group">
  43. <label class="col-sm-4 control-label">Clave privada (hex):</label>
  44. <div class="col-sm-8 input-group">
  45. <input class="form-control" ng-readonly="true" value="{{vm.keyPair.privateKey.toString('hex')}}">
  46. </div>
  47. </div>
  48. <div class="form-group">
  49. <label class="col-sm-4 control-label">Clave pública (decimal):</label>
  50. <div class="col-sm-8 input-group">
  51. <input class="form-control" ng-readonly="true" value="{{vm.pubKeyDecimal}}">
  52. </div>
  53. </div>
  54. <div class="form-group">
  55. <label class="col-sm-4 control-label">Clave pública (hex):</label>
  56. <div class="col-sm-8 input-group">
  57. <input class="form-control" ng-readonly="true" value="{{vm.pubKey.toString('hex')}}">
  58. </div>
  59. </div>
  60. <div class="form-group">
  61. <label class="col-sm-4 control-label">Formato de clave para la red:</label>
  62. <div class="col-sm-8 input-group">
  63. <select ng-model="vm.network"
  64. ng-change="vm.formatKeyForNetwork()"
  65. ng-options="network.label for network in vm.networks"
  66. class="form-control">
  67. </select>
  68. </div>
  69. </div>
  70. <div class="form-group">
  71. <label class="col-sm-4 control-label">
  72. <a ng-click="vm.showWifCompressed = !vm.showWifCompressed">Clave privada (formato WIF, comprimida):</a>
  73. </label>
  74. <div class="col-sm-8 input-group">
  75. <input class="form-control" ng-readonly="true" value="{{vm.keyPair.wif}}">
  76. </div>
  77. <div ng-show="vm.showWifCompressed" class="col-sm-offset-4 col-sm-8 qr-code" id="qrPrivCompressed"></div>
  78. </div>
  79. <div class="form-group">
  80. <label for="wifUncompressed" class="col-sm-4 control-label">
  81. <a ng-click="vm.showWifUncompressed = !vm.showWifUncompressed">Clave privada (formato WIF, descomprimida):</a>
  82. </label>
  83. <div class="col-sm-8 input-group">
  84. <input id="wifUncompressed"
  85. ng-model="vm.keyPairUncompressed.wif"
  86. ng-change="vm.importFromWif()"
  87. ng-class="{'well-error': vm.error}"
  88. class="form-control"><br/>
  89. <span class="input-group-addon" ng-if="!vm.error">&lt;-- pegue aquí la clave en formato WIF</span>
  90. <span class="input-group-addon well-error" ng-if="vm.error"> {{vm.error}}</span>
  91. </div>
  92. <div ng-show="vm.showWifUncompressed" class="col-sm-offset-4 col-sm-8 qr-code" id="qrPrivUncompressed"></div>
  93. </div>
  94. <div class="form-group">
  95. <label class="col-sm-4 control-label">
  96. <a ng-click="vm.showPubkey = !vm.showPubkey">Dirección (P2PKH) :</a>
  97. </label>
  98. <div class="col-sm-8 input-group">
  99. <input class="form-control" ng-readonly="true" value="{{vm.keyPair.address}}">
  100. </div>
  101. <div ng-show="vm.showPubkey" class="col-sm-offset-4 col-sm-8 qr-code" id="qrPubkey"></div>
  102. </div>
  103. <div class="form-group" ng-if="vm.network.config.bech32">
  104. <label class="col-sm-4 control-label">Dirección SegWit v0 P2SH-P2WPKH:</label>
  105. <div class="col-sm-8 input-group">
  106. <input class="form-control" ng-readonly="true" value="{{vm.keyPair.nestedP2WPKHAddress}}">
  107. </div>
  108. </div>
  109. <div class="form-group" ng-if="vm.network.config.bech32">
  110. <label class="col-sm-4 control-label">Dirección SegWit v0 bech32 P2WPKH:</label>
  111. <div class="col-sm-8 input-group">
  112. <input class="form-control" ng-readonly="true" value="{{vm.keyPair.P2WPKHAddress}}">
  113. </div>
  114. </div>
  115. <div class="form-group" ng-if="vm.network.config.bech32">
  116. <label class="col-sm-4 control-label">Dirección SegWit v1 bech32m P2TR:</label>
  117. <div class="col-sm-8 input-group">
  118. <input class="form-control" ng-readonly="true" value="{{vm.keyPair.P2TRAddress}}">
  119. </div>
  120. </div>
  121. </form>
  122. </div>
  123. <h4>Algoritmo de Firma Digital de Curva Elíptica (ECDSA): Firmas mensaje</h4>
  124. <div class="well">
  125. <form class="form-horizontal">
  126. <div class="form-group">
  127. <label for="message" class="col-sm-4 control-label">Mensaje a firmar:</label>
  128. <div class="col-sm-8 input-group">
  129. <input id="message" ng-model="vm.message" ng-change="vm.signMessage()" class="form-control">
  130. </div>
  131. </div>
  132. <div class="form-group">
  133. <label class="col-sm-4 control-label">Hash SHA-256 del mensaje:</label>
  134. <div class="col-sm-8 no-left-padding">
  135. <input class="form-control" ng-readonly="true" value="{{vm.messageHash.toString('hex')}}">
  136. </div>
  137. </div>
  138. <div class="form-group">
  139. <label class="col-sm-4 control-label">Firma:</label>
  140. <div class="col-sm-8 no-left-padding">
  141. <input class="form-control" ng-readonly="true" value="{{vm.signature}}">
  142. </div>
  143. </div>
  144. </form>
  145. </div>
  146. <h4>Algoritmo de Firma Digital de Curva Elíptica (ECDSA): Verificar firma</h4>
  147. <div class="well" ng-class="{'well-success': vm.signatureValid, 'well-error': !vm.signatureValid}">
  148. <form class="form-horizontal">
  149. <div class="form-group">
  150. <label for="messageHash" class="col-sm-4 control-label">Hash del mensaje:</label>
  151. <div class="col-sm-8 input-group">
  152. <input id="messageHash"
  153. ng-model="vm.messageHashToVerify"
  154. ng-change="vm.verifySignature()"
  155. class="form-control">
  156. </div>
  157. </div>
  158. <div class="form-group">
  159. <label for="signature" class="col-sm-4 control-label">Firma:</label>
  160. <div class="col-sm-8 no-left-padding">
  161. <input id="signature"
  162. ng-model="vm.signatureToVerify"
  163. ng-change="vm.verifySignature()"
  164. class="form-control">
  165. </div>
  166. </div>
  167. </form>
  168. </div>
  169. <h4>Multiplo ECC</h4>
  170. <div class="well">
  171. <form class="form-horizontal">
  172. <div class="form-group">
  173. <label for="multiplicand" class="col-sm-4 control-label">Multiplicando:</label>
  174. <div class="col-sm-8 input-group">
  175. <input id="multiplicand"
  176. ng-model="vm.eccMultiplicand"
  177. ng-change="vm.eccMultiply()"
  178. class="form-control">
  179. </div>
  180. <div class="col-sm-offset-4 input-group">
  181. <div class="input-group-addon">Multiplicando de la clave privada:</div>
  182. <div class="input-group-addon">
  183. <input type="checkbox"
  184. ng-model="vm.multiplicandPrivKey"
  185. ng-change="vm.eccMultiply()">
  186. </div>
  187. <input class="form-control no-border"
  188. ng-readonly="true"
  189. type="text">
  190. </div>
  191. </div>
  192. <div class="form-group">
  193. <label for="multiplier" class="col-sm-4 control-label">Multiplicador:</label>
  194. <div class="col-sm-8 no-left-padding">
  195. <input id="multiplier"
  196. ng-model="vm.eccMultiplier"
  197. ng-change="vm.eccMultiply()"
  198. class="form-control">
  199. </div>
  200. </div>
  201. <div class="form-group">
  202. <label class="col-sm-4 control-label">Resultado:</label>
  203. <div class="col-sm-8 no-left-padding">
  204. <input class="form-control" ng-readonly="true" value="{{vm.eccResult}}">
  205. </div>
  206. </div>
  207. </form>
  208. </div>