Virgil Security

Easy-to-use developer tools for securing user data in mobile & web apps, the Cloud, and IoT products

Works with your favorite tech

Outsourcing security to your cloud platform isn’t enough. Use our open source SDK across all major platforms to encrypt, sign, and verify data and to distribute and secure keys between your users.

Using Virgil Security helped us get end-to-end encryption into our app and out to market in record time. Strong security and great developer support. Can't beat that combo!

Our building blocks can be used alone or together:

End-to-end encrypt messages & personal data on user devices

If your data is only encrypted in transit and at rest, it’s still vulnerable to developer error and security issues at your service providers. With end-to-end encryption, only your end-users or IoT devices can decrypt their data – protecting them and you.

// Encrypt a message on client device before posting it up to the cloud
const susansEncryptedMessage = virgilCrypto.encrypt(
  "Hey Alex!", 
  alex.publicKey
).toString("base64");

// Send it to the cloud
msgService.send({ to: alex, message: susansEncryptedMessage });

// Decrypt it on the the other user’s device - the cloud doesn’t have the keys
const susansMessage = virgilCrypto.decrypt(
  susansEncryptedMessage, 
  alex.privateKey
).toString("utf8");

Make your authorization code unbreakable

With Virgil, your data isn’t protected merely by if statements. If your users’ data is out in the wild, it doesn’t matter because only your users can decrypt it.

if (!user.hasAccess(folder)) {
  throw new Error("Access denied");
}

// Real authorization is one where there’s no way around:
try {
  const folderKey = virgilCrypto.decrypt(encryptedFolderKey, user.privateKey);
} catch (err) {
  throw new Error("Can’t decrypt data without the key");
}

Verify that the data wasn’t tampered with

Can you tell if a message or sensor really came from a trusted user or from somebody else? A simple solution:

// Verify that this message was really written by Susan
if (!virgilCrypto.verify(encryptedMessage, messageSignature, susan.publicKey)) {
  throw new Error("This message isn't from Susan");
}

Use our secure, geo-balanced key management service to distribute keys between users

Allow your users to find each other’s public keys. Backup encrypted user private keys. Unlock lost user keys. Natively integrated with the SDK.

// Publish public keys for users to be able to encrypt data to each other
cardManager.publishCard({
    privateKey: aliceKeyPair.privateKey,
    publicKey: aliceKeyPair.publicKey
});

// Easily retrieve public keys by referring to a user’s ID
cardManager.searchCards("[email protected]")
.then(bobsCards => {
  const bobsPublicKeys = bobsCards.map(card => card.publicKey);
  const encryptedMessage = virgilCrypto.encrypt("Hey Bob!", bobsPublicKeys);
});

// Save encrypted private key
syncKeyStorage.storeEntry(
  "my_private_key", 
  virgilCrypto.exportPrivateKey(myPrivateKey)
).then(() => {
  console.log("Private key is saved");
});

End-to-end encryption
for messaging

Learn more

End-to-end encryption
for IoT devices

Learn more

Get started now with our easy-to-follow guides.
Start free, pay 2¢ per user per month beyond 250 user keys.

Empowering these awesome companies

Heltha
Boston, MA

America's first telemedicine app for Hormone Balance, with E2EE chat for clients & doctors.

Hushed
Ontario, CANADA

E2EE messaging for private disposable phone numbers.

Appfriends
NEW YORK, NY

E2EE private in-app messaging & user engagement platform.

Sikka Chat
San Jose, CA

E2EE chat service for patients & doctors at private practices.

Cloakroom
WASHINGTON, D.C.

The invite-only E2EE social chat app in and near the U.S. White House.

Mybeepr
Sydney, AUSTRALIA

Australia’s most trusted solution for mobile healthcare communication, E2EE.