As far as I can understand, PDAs are a way for programmatically signing for an address without actually having a private key. The process of generating a new PDA is calculating sha256 hash of program_id + seeds + bump
and check whether the result is a valid public key (does it reside on the curve?), if it's not a valid public key (thus no corresponding private key exists) it's our newly generated PDA, otherwise decrement the bump and try again.
The thing that I can't grasp is that, at the end, this process will generate an address-like string (or maybe an actual address, I don't know) but how does the program who owns this PDA prove that it is the true owner of the PDA? And how does it prevent adversaries from forging the signature?