1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
---
title: Web Crypto API
slug: Web/API/Web_Crypto_API
tags:
- API
- API de criptografia Web
- Overview
- Referencia
- Visão Geral
- Web Crypto API
translation_of: Web/API/Web_Crypto_API
---
<p>{{DefaultAPISidebar("Web Crypto API")}}{{SeeCompatTable}}{{draft}}</p>
<p>A <strong>Web Crypto API</strong> é uma interface que permite um script utilizar criptografias primitivas para criar sistemas usando criptografia.</p>
<p>Uma característica fundamental desta API é permitir a manipulação e o armazenamento de keys de criptografia privadas e secretas sem que o JavaScript tenha acesso aos bits internos das keys.</p>
<p>Essa interface permite que scripts acessem as seguintes primitivas:</p>
<ul>
<li><em>digest</em>, a habilidade de computar um hash de um bloco arbitrário de dados com o objetivo de detectar se houve alguma mudança.</li>
<li><em>mac</em>, a habilidade de computar um código de autenticação de mensagem.</li>
<li><em>sign</em> e <em>verify</em>, a habilidade de assinar digitalmente um documento e de verificar se uma dada assinatura pertence àquele que afirma ser seu signatário.</li>
<li><em>encrypt</em> e <em>decrypt</em>, a habilidade de codificar e decodificar um documento utilizando chaves criptográficas.</li>
<li><em>import</em> e <em>export</em>, a habilidade de importar e exportar keys criptografadas.</li>
<li><em>key generation</em>, a habilidade de criar uma key ou um par de keys de criptografia segura, sem o uso de uma key base, mas utilizando a entropia do sistema local como fonte de aleatoriedade para essa geração.</li>
<li><em>key wrapping</em> e <em>unwrapping</em>, a habilidade de transmitir e receber uma key de um terceiro, codificada utilizando uma outra key, sem expor a key subjacente ao código JavaScript.</li>
<li><em>random</em>, a habilidade de gerar números pseudo-randômicos de criptografia significante.</li>
</ul>
<p>A Web Crypto API não resolve todos os problemas de criptografia que um site Web ou aplicação pode encontrar:</p>
<ul>
<li>Ela não dispensa o respeito ao <a href="/en-US/docs/Web/Security/Same-origin_policy">modelo de origem idêntica</a> do navegador, como em casos em que chaves são fornecidas por autoridades centrais utilizadas por diversos sítios Web.</li>
<li>Ela é incapaz de interagir com hardwares dedicados, como cartões inteligentes (smartcards), tokens USB ou geradores de aleatoriedade.</li>
</ul>
<div class="warning">
<p><strong>Atenção!</strong></p>
<ul>
<li>O mero uso de criptografia não faz seu sistema seguro. Segurança é um <strong>processo</strong> que constantemente avalia os riscos em que um sistema pode incorrer dentro do seu contexto de utilização. O contexto e os riscos que podem ocorrer evoluem no tempo.</li>
<li>Quando se lida com segurança, todo o <strong>sistema</strong> precisa ser considerado. No caso da Web Crypto API, os desenvolvedores Web não devem considerar apenas a segurança de seu código ou script, mas também a segurança da conexão que é mantida com o servidor e os dados que o servidor pode manter em texto plano (não criptografado). A segurança geral não será mais forte que a segurança de da parte mais fraca do sistema.</li>
</ul>
</div>
<h2 id="Interfaces">Interfaces</h2>
<p>Alguns navegadores implementam uma interface chamada {{domxref("Crypto")}} sem que ela esteja bem definida ou seja substancialmente criptografado. Para evitar confusões, métodos e propriedades desta interface foram retiradas de navegadores que implementaram Web Crypto API, e todos os métodos Web Crypto API estão disponíveis em uma nova interface: {{domxref("SubtleCrypto")}}. A propriedade {{domxref("Crypto.subtle")}} dá acesso a um objeto que a implementa.</p>
<h2 id="Casos_de_uso">Casos de uso</h2>
<p>A Web Crypto API pode ser utilizada:</p>
<ul>
<li>Para verificar que dados não foram alterados por um terceiro. Mesmo se dados foram armazenados sem criptografia, o armazenamento de uma assinatura, gerada a partir de uma senha, permite que pessoas que conhecem a senha identificar se o conteúdo e a assinatura são genuínos.</li>
</ul>
<h2 id="Especificações">Especificações</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">Especificação</th>
<th scope="col">Status</th>
<th scope="col">Comentário</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName("Web Crypto API")}}</td>
<td>{{Spec2("Web Crypto API")}}</td>
<td>Definição inicial</td>
</tr>
</tbody>
</table>
<p> </p>
<p> </p>
<h2 id="Compatibilidade_de_Browser">Compatibilidade de Browser</h2>
<p>{{CompatibilityTable}}</p>
<table>
<tbody>
<tr>
<th>Característica</th>
<th>Chrome</th>
<th>Firefox (Gecko)</th>
<th>Internet Explorer</th>
<th>Opera</th>
<th>Safari (WebKit)</th>
</tr>
<tr>
<td>Suporte básico</td>
<td>{{CompatChrome(37)}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatOpera(24)}}</td>
<td>{{CompatUnknown}}</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr>
<th>Característica</th>
<th>Android Webview</th>
<th>Chrome for Android</th>
<th>Firefox Mobile (Gecko)</th>
<th>Firefox OS</th>
<th>IE Mobile</th>
<th>Opera Mobile</th>
<th>Safari Mobile</th>
</tr>
<tr>
<td>Suporte básico</td>
<td>{{CompatNo}}</td>
<td>{{CompatChrome(37)}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatUnknown}}</td>
<td>{{CompatUnknown}}</td>
</tr>
</tbody>
</table>
<p> </p>
|