Esatto. Concettualmente la cosa funziona così:
A ha una chiave pubblica (A_P) e una chiave privata (A_R); alla stessa maniera B (chiave pubblica B_P, chiave privata B_R).
Tutto ciò che viene cifrato con una chiave pubblica può essere decifrato solo con la chiave privata, e viceversa.
Per questo motivo, se A vuole scrivere un messaggio che solo B possa decodificare, cifrerà il messaggio con B_R, per cui soltanto B potrà leggerlo.
All'atto pratico però questo presenta due problemi:
1. gli algoritmi di crittografia asimmetrica sono piuttosto lenti per quantità di dati significative;
2. la cifratura fatta in questa maniera garantisce la confidenzialità del messaggio (ovvero, che possa essere letto solo da B), ma non l'autenticità (ovvero, B non può sapere con certezza che sia stato A a scrivergli, dato che chiunque può avere la chiave pubblica di B).
Per questo motivo, normalmente la questione si complica leggermente:
1. il messaggio in realtà viene cifrato con un algoritmo simmetrico (ovvero, che richiede la stessa chiave per essere cifrato e decifrato), molto più veloce per cifrare quantità di dati consistenti; la chiave di cifratura viene generata in maniera casuale, ed è solo questa ad essere cifrata a sua volta con la chiave pubblica di B.
2. per garantire l'autenticità del mittente, A, prima di cifrare il messaggio, ne genera un hash, ovvero una specie di "impronta digitale" del messaggio; le funzioni di hash sono create in maniera tale da essere molto sensibili a qualunque cambiamento nell'input, per cui anche un'alterazione piccola del messaggio cambia completamente il risultato dell'hashing. L'hash quindi viene cifrato con la chiave privata di A, e aggiunto al messaggio.
In questo modo, alla ricezione del messaggio B decodifica la chiave di cifratura con la sua chiave privata, la usa per decodificare il messaggio e quindi ne ri-effettua l'hashing; intanto decodifica l'hash che gli è stato inviato con la chiave pubblica di A, e se i due hash combaciano significa che il messaggio è arrivato esattamente nello stato in cui A l'ha creato.
L'altro problema fondamentale che si pone è sulla correttezza delle chiavi pubbliche: se B deve parlare con A per la prima volta e c'è un malintenzionato di mezzo che può alterare le comunicazioni, questo può fornire ad entrambi la sua chiave pubblica e intercettare/modificare tranquillamente tutto il traffico. A questo problema la soluzione centralizzata è l'uso dei certificati (le chiavi pubbliche sono garantite da una CA di cui tutti si fidano a priori, sistema su cui si basa ad esempio HTTPs) o dalla web of trust (ogni nodo nella rete dà fiducia o meno alle altre chiavi in base ad una verifica diretta, e al momento di ricevere una chiave pubblica di qualcuno "chiedi" a quelli di cui già ti fidi se hanno qualche conferma diretta o indiretta della veridicità della chiave in questione).