I am learning about digital signature. For performance, we normally do hash then sign.
One approach is to sign $H(m)$ where $H(\cdot)$ is collision resistant, but under chosen message attack, this approach only has security level of $n/2$ because of birthday attack.
Another approach is to sign $H(m \oplus r)$ where $H(\cdot)$ is a second-preimage resistant hash function and send $r$ along with the signature, but this is not efficient.
is there a different approach? can we do better on the second approach?