> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kiwify.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Gerando Chaves

> Como gerar um par de chaves Ed25519 para autenticação na API

# Gerando Par de Chaves

A Banking API usa autenticação EdDSA com chaves Ed25519. Você precisa gerar um par de chaves (pública e privada) antes de criar uma conta de serviço.

<Warning>
  A chave privada nunca deve ser compartilhada. Guarde-a em local seguro. Você precisará dela para assinar todas as requisições à API.
</Warning>

## Método 1: Ferramenta Online (Mais Fácil)

Use nossa ferramenta online para gerar chaves diretamente no navegador:

<Card title="Gerar Chaves Online" icon="key" href="https://conta.kiwify.com/public/generate-keys">
  Gere um par de chaves Ed25519 instantaneamente no navegador
</Card>

A ferramenta gera a chave privada localmente no seu navegador - ela nunca é enviada para nossos servidores.

## Método 2: Terminal (Recomendado)

Use o comando `ssh-keygen` para gerar as chaves:

```bash theme={null}
ssh-keygen -t ed25519 -f service-account-key -N ""
```

Isso cria dois arquivos:

* `service-account-key` - Chave privada (guarde em segurança)
* `service-account-key.pub` - Chave pública (usada no cadastro)

Para ver a chave pública:

```bash theme={null}
cat service-account-key.pub
```

Saída esperada:

```
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... seu-usuario@seu-computador
```

## Método 3: OpenSSL

```bash theme={null}
# Gerar chave privada
openssl genpkey -algorithm Ed25519 -out private.pem

# Extrair chave pública
openssl pkey -in private.pem -pubout -out public.pem
```

<Note>
  Para usar com a API, você precisará converter a chave pública para o formato OpenSSH (`ssh-ed25519 ...`).
</Note>

## Método 4: Programaticamente

### Node.js

```javascript theme={null}
import { generateKeyPairSync } from 'crypto';
import { writeFileSync } from 'fs';

const { publicKey, privateKey } = generateKeyPairSync('ed25519', {
  publicKeyEncoding: { type: 'spki', format: 'pem' },
  privateKeyEncoding: { type: 'pkcs8', format: 'pem' }
});

writeFileSync('private.pem', privateKey);
writeFileSync('public.pem', publicKey);
```

### Python

```python theme={null}
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
from cryptography.hazmat.primitives import serialization

private_key = Ed25519PrivateKey.generate()
public_key = private_key.public_key()

# Salvar chave privada
with open("private.pem", "wb") as f:
    f.write(private_key.private_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PrivateFormat.PKCS8,
        encryption_algorithm=serialization.NoEncryption()
    ))

# Salvar chave pública
with open("public.pem", "wb") as f:
    f.write(public_key.public_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PublicFormat.SubjectPublicKeyInfo
    ))
```

## Formato da Chave Pública

A API aceita chaves públicas no formato OpenSSH:

```
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... comentario-opcional
```

| Parte         | Descrição                    |
| ------------- | ---------------------------- |
| `ssh-ed25519` | Tipo do algoritmo            |
| `AAAAC3...`   | Chave codificada em base64   |
| `comentario`  | Opcional, para identificação |

## Próximo Passo

Após gerar as chaves, crie uma conta de serviço no dashboard:

<Card title="Criar Conta de Serviço" icon="user-plus" href="/api-reference/banking/service-accounts">
  Configure permissões e IPs permitidos no dashboard Conta Digital
</Card>
