Una possibile soluzione potrebbe essere quella di fare affidamento sui server intermediari e non consentire la comunicazione P2P per i client non fidati.
Diciamo che è un programma di chat (come Skype), il client allo stesso tempo diventa un server intermedio sulla rete ed è in grado di ritrasmettere i dati tra altri client.
Se qualcuno ti contatta, deve prima cercare l'IP dei nodi intermedi a cui sei connesso (attraverso un DHT o qualcosa di simile) e poi inviare tutto quello che vuoi dire a quel nodo, che lo trasmetterò a voi. Nessuna possibilità di fare il DoS qui, in quanto portare a termine il nodo, non servirà a nulla e il tuo cliente si riconnetterà immediatamente a uno diverso.
Una volta che i dati ti raggiungono (tramite l'intermediario), diciamo che si trattava di una richiesta di contatto / chat e tu l'hai accettata. A questo punto, ti fidi che quella persona non faccia nulla di malevolo e dia loro il tuo IP (tramite l'intermediario come sempre), e poi si connette direttamente a te. Inoltre, se si tratta di una richiesta di contatto, il tuo cliente salva anche la sua chiave pubblica, il che significa che la prossima volta che la persona si reca online l'intero processo verrà eseguito automaticamente e il tuo cliente darà loro il tuo IP immediatamente (tramite un intermediario come sempre).
Questo può essere contrastato inondando la rete con client maligni (che fungeranno da nodi intermedi ma non rispettano la riservatezza degli altri IP del nodo) ma una volta che il software diventa popolare e ci sono abbastanza nodi legittimi sarà molto difficile (pensate a un attacco di sybil su Tor).