If you are into cybersecurity, you should know that public key cryptography is great at securing methods by using a public key, and that symmetric key encryption is fast and efficient. So what happens when we combine the two. For this, we get hybrid encryption, such as with ECIES (Elliptic Curve Integrated Encryption Scheme).
With ECIES, Alice creates a key pair of a and Q_A, where Q_A is her public key. She then passes Q_A to Bob. Alice now produces S=r.Q_A, which is another point on the curve. The value of S is then used to create a symmetric key (S_k) — normally by just taking the x-coordinate point of the point S. Alice then encrypts a message with S_k and then passes her public key (Q_A) and the ciphertext (C ) to Bob. From his private key (b) and Q_A, Bob is then able to regenerate the value of S and the same symmetric key (S_k). He will then be able to decrypt the message:
An implementation of ECIES in Google Tink for Golang is [here]:
package main
import (
"fmt"
"os"
"strconv"
"github.com/tink-crypto/tink-go/v2/aead/aesgcm"
"github.com/tink-crypto/tink-go/v2/hybrid/ecies"
"github.com/tink-crypto/tink-go/v2/hybrid"
"github.com/tink-crypto/tink-go/v2/keyset"
)…