Criptare
SMS criptat end-to-end din software-ul tău: ce e criptat și ce nu
Software-ul tău criptează fiecare mesaj cu cheia publică a telefonului, iar SMSTunnel nu-l poate citi. Ce e criptat azi, ce nu și cum ascunzi și numărul.
Scris de NARBOWEB SRL, firma care dezvoltă SMSTunnel Publicat 8 min de citit
Să zicem că ai un laborator de analize, iar aplicația voastră le trimite pacienților un SMS când sunt gata rezultatele: „Bună ziua, rezultatele analizelor dumneavoastră sunt gata. Le găsiți în contul de pe site.” Mesajul pleacă de pe serverul vostru, trece prin contul SMSTunnel și ajunge la telefonul Android al laboratorului, care îl trimite de pe numărul vostru. Criptarea end-to-end închide drumul acesta pentru oricine e la mijloc, inclusiv pentru noi: software-ul tău încuie mesajul cu cheia publică a telefonului înainte ca mesajul să plece de pe server, și doar telefonul îl poate descuia.
Criptarea e opțională și e inclusă în toate planurile, chiar și în cel Gratuit. Mai jos vezi cum funcționează, ce integrări o au, cum o pornești și, la fel de important, ce nu acoperă. O criptare despre care nu poți spune exact ce protejează nu valorează mare lucru, așa că limitele ei sunt aici la vedere, nu într-o notă de subsol.
Cum funcționează
Sunt trei pași, iar mesajul poate fi citit doar la primul și la ultimul:
- Software-ul tău criptează. Încuie mesajul cu cheia publică a telefonului tău, pe serverul tău, înainte să plece ceva de acolo. Fiecare telefon are propria pereche de chei RSA-2048: cheia privată nu iese niciodată de pe telefon, iar SMSTunnel păstrează doar cheia publică.
- SMSTunnel transportă. Serverele noastre doar transmit mai departe textul criptat și îl șterg după ce a fost trimis. Nu putem citi mesajul.
- Telefonul tău trimite. Doar telefonul tău are cheia privată. Decriptează textul și îl trimite ca SMS obișnuit, de pe numărul tău.
Ce vedem în continuare, cu criptarea pornită: contul tău, telefonul tău și ora fiecărui mesaj, plus numărul la care merge mesajul, dacă nu folosești confidențialitatea maximă (o găsești mai jos).
Ce e criptat și ce nu
| Mesajul | Criptat end-to-end? |
|---|---|
| Mesajele criptate de software-ul tău (API-ul, SDK-ul pentru Node.js, pluginul WordPress cu criptarea pornită) | Da, textul. Numărul rămâne vizibil în cont, ca să apară în lista ta de mesaje |
| Aceleași mesaje, cu confidențialitate maximă (Profesional și Enterprise) | Da, și textul, și numărul |
| Mesajele scrise de tine în dashboard | Nu. Sunt protejate pe drum și rămân lizibile în cont, ca să-ți vezi istoricul |
| Mesajele trimise de software-ul tău fără criptare | Nu. Rămân lizibile în istoricul contului |
| Codurile de autentificare trimise de pluginul WordPress | Nu. Pluginul nu le criptează |
| Mesajele primite de telefon, dacă le sincronizezi | Nu. Sunt protejate pe drum și păstrate lizibile, ca să le poți citi în dashboard |
| SMS-ul propriu-zis, între telefonul tău și destinatar | Nu. După ce telefonul îl trimite, merge prin rețeaua mobilă ca orice alt SMS |
Toate conexiunile către SMSTunnel sunt criptate (TLS 1.2 sau mai nou), indiferent dacă mesajul e criptat end-to-end sau nu. Tabelul arată cine poate citi textul după ce ajunge la destinație.
Despre mesajele primite: lucrăm la criptarea lor end-to-end, astfel încât să poată fi citite doar pe telefonul tău și într-o aplicație desktop care urmează.
Pornești criptarea în WordPress
Pluginul SMSTunnel pentru WordPress criptează mesajele site-ului pentru telefonul tău înainte să plece din WordPress. Are nevoie o singură dată de cheia publică a telefonului, pe care o primește printr-un cod QR:
- În WordPress, mergi la SMSTunnel → Encryption Settings.
- Pornește conectarea pentru criptare, ca să apară un cod QR.
- Scanează codul QR cu aplicația SMSTunnel de pe telefon.
- Gata: mesajele site-ului tău sunt acum criptate end-to-end.
La conectare, telefonul trimite doar cheia lui publică. Cheia privată nu pleacă de pe telefon, așa că SMSTunnel păstrează doar text criptat, pe care nu-l poate citi. Ține minte excepția din tabel: codurile de autentificare pentru conectarea în WordPress nu sunt criptate.
În aplicația de pe telefon, opțiunea apare la Setări ca Criptare end-to-end, „pentru mesajele predate de aplicațiile tale (nu și pentru mesajele primite)”.
Criptezi din propriul cod
Cu SDK-ul pentru Node.js
SDK-ul oficial face totul într-un singur apel: ia cheia publică a telefonului, criptează numărul și textul și trimite rezultatul.
import { SmsTunnelNodeClient } from '@narcisbodea/smstunnel-sdk/node';
const client = new SmsTunnelNodeClient({ apiKey: process.env.SMSTUNNEL_API_KEY! });
// Criptează { to, message } cu cheia publică a telefonului, apoi trimite.
await client.encryptAndSendSms(
'+40712345678',
'Bună ziua, rezultatele analizelor dumneavoastră sunt gata.',
'id-telefon',
);
id-telefon e telefonul care va trimite mesajul: client.getDevices() îți dă lista telefoanelor, cu id-urile lor. În modulul pentru NestJS, smsTunnelService.encryptAndSendSms(to, message) face schimbul de chei cu telefonul la prima folosire și criptează de atunci încolo.
Criptarea se face pe serverul tău. Din browser nu se poate cu SDK-ul, iar cheia API oricum nu are ce căuta într-un browser.
Cu API-ul REST, în orice limbaj
Fără SDK, pașii sunt aceiași:
- Iei cheia publică a telefonului cu
GET /api/v1/devices/{deviceId}/public-key. - Criptezi cu ea JSON-ul
{"to": "+40712345678", "message": "…"}, pe serverul tău. - Trimiți rezultatul la
POST /api/v1/sms/send, caencryptedPayload(base64), cu"encrypted": true, cudeviceIdși, în plus, cuto, ca numărul să apară în lista ta de mesaje.
{
"to": "+40712345678",
"deviceId": "671fe0d9c3b2a1f0e9d8c7b6",
"encrypted": true,
"encryptedPayload": "BASE64_AL_JSON-ULUI_CRIPTAT"
}
Nu trebuie să descoperi singur formatul criptării: când adaugi o aplicație în dashboard și alegi criptarea end-to-end, primești cod gata scris pentru PHP, Node.js, Python și C#. Detaliile sunt în referința API.
O diferență practică: un mesaj criptat intră în limita zilnică a planului și e refuzat după ce o depășești, pentru că nu poate primi scurtul rând „free by smstunnel.io” pe care planul Gratuit îl adaugă mesajelor în plus din ziua respectivă.
Afli când se schimbă cheia telefonului
Dacă aplicația SMSTunnel e reinstalată, telefonul își face o pereche nouă de chei. GET /api/v1/devices/{deviceId}/e2e-status îți spune dacă criptarea e pornită, dacă există o cheie publică, amprenta ei (primele 16 caractere hexazecimale ale unui hash SHA-256) și când a fost creată. Păstrezi amprenta după prima conectare și o compari înainte să trimiți:
const rezultat = await client.verifyDeviceKey('id-telefon', amprentaSalvata);
if (rezultat.needsRePairing) {
// Aplicația a fost reinstalată și cheia s-a schimbat: conectează din nou înainte să trimiți.
}
Confidențialitate maximă: ascunzi și numărul
Criptarea end-to-end ascunde textul. În planurile Profesional și Enterprise, confidențialitatea maximă ascunde și numărul, așa că nu putem vedea cui îi e adresat mesajul.
Funcționează cu un certificat privat creat de tine, protejat de o parolă pe care o știi doar tu. Pui certificatul în software-ul tău și pe telefon, cheia nu trece niciodată prin serverele noastre, iar de atunci telefonul refuză orice mesaj care nu e sigilat cu el, inclusiv mesajele scrise în dashboard.
1. Creezi certificatul
În dashboard: Apps → Add an app → Encrypt end to end → Maximum privacy, unde primești și cod gata scris pentru PHP, Node.js, Python și C#. Sau îl creezi pe propriul computer, de unde nu pleacă nimic:
npx -p @narcisbodea/smstunnel-sdk smstunnel-make-certificate
Comanda îți cere o parolă de cel puțin 12 caractere și salvează fișierul smstunnel-certificate.json.
2. Îl pui pe telefon
În aplicația SMSTunnel (versiunea 1.0.9 sau mai nouă), deschizi Setări → Certificat privat și lipești conținutul fișierului. Dacă preferi să scanezi un cod QR, dashboard-ul îți arată unul la Apps → Maximum privacy → „I already have one”.
3. Trimiți mesaje sigilate
import { readFileSync } from 'node:fs';
import { SmsTunnelNodeClient, openCertificate } from '@narcisbodea/smstunnel-sdk/node';
const client = new SmsTunnelNodeClient({ apiKey: process.env.SMSTUNNEL_API_KEY! });
const certificat = openCertificate(
readFileSync('smstunnel-certificate.json', 'utf8'),
process.env.SMSTUNNEL_CERT_PASSWORD, // parola stă în mediu, nu în cod
);
await client.sendSealedSms('+40712345678', 'Rezultatele sunt gata.', 'id-telefon', certificat);
Prin API-ul REST, un mesaj sigilat se trimite ca encryptedPayload, cu "encrypted": true și deviceId, fără to.
Ce trebuie să știi înainte să-l pornești:
- Vedem în continuare contul tău, telefonul tău și ora fiecărui mesaj.
- Dacă sincronizezi în cont mesajele primite, un răspuns arată numărul de la care a venit.
- Software-ul tău are nevoie de certificat și de parola lui ca să trimită. Ține parola în afara codului, de exemplu într-o variabilă de mediu.
- Nu putem recupera un certificat sau o parolă pierdută. Dacă pierzi una dintre ele, faci un certificat nou și îl pui din nou pe telefon și în software.
- În celelalte planuri, un mesaj fără
tosau unul sigilat cu un certificat e refuzat, cu codul 403.
Cum se compară
Dintre uneltele care trimit SMS de pe propriul telefon Android, httpSMS are și el criptare end-to-end opțională: pui o cheie în aplicația lui și aceeași cheie în codul tău, pentru mesajele trimise și pentru cele primite. Pentru textbee, nu am găsit criptare end-to-end în documentație, care spune că traficul API folosește HTTPS și că mesajele sunt păstrate pe serverele lui. SMSTunnel folosește câte o pereche de chei pentru fiecare telefon, așa că cheia care îți descuie mesajele nu pleacă niciodată de pe telefon, și adaugă confidențialitatea maximă pentru număr în planurile Profesional și Enterprise.
Întrebări frecvente
Poate SMSTunnel să-mi citească mesajele criptate?
Nu. Avem doar cheia publică a telefonului, care poate încuia un mesaj, dar nu îl poate descuia, iar textul criptat îl ștergem după ce a fost trimis.
E criptat SMS-ul și pe drumul până la destinatar?
Nu. Aici, end-to-end înseamnă de la software-ul tău până la telefonul tău. După ce telefonul îl trimite, e un SMS obișnuit în rețeaua mobilă.
Costă în plus criptarea?
Nu. E inclusă în toate planurile, inclusiv în cel Gratuit. Confidențialitatea maximă vine cu Profesional (39 $ pe lună) și Enterprise (99 $ pe lună), fără taxe; vezi pagina de prețuri.
O pot folosi într-o aplicație cu mulți clienți?
Da. Pe Enterprise, fiecare client își conectează propriul telefon, iar aplicația ta poate cripta fiecare mesaj pentru telefonul care îl va trimite.
Vezi și
Alte articole
Încearcă-l cu telefonul tău
Instalează aplicația Android, autentifică-te, iar software-ul tău poate trimite primul mesaj în câteva minute. Planul Gratuit nu cere card bancar.