Como gerar um valor aleatório do BigInteger em Java?

Preciso gerar inteiros aleatórios arbitrariamente grandes no intervalo de 0 (inclusive) a n (exclusivo). Meu pensamento inicial era chamarnextDouble e multiplique por n, mas quando n chegar a ser maior que 253, os resultados não seriam mais distribuídos uniformemente.

BigInteger tem o seguinte construtor disponível:

public BigInteger(int numBits, Random rnd)

Constrói um BigInteger gerado aleatoriamente, distribuído uniformemente no intervalo de 0 a (2numBits - 1), inclusive.

Como isso pode ser usado para obter um valor aleatório no intervalo de 0 a n, onde n não é uma potência de 2?

questionAnswers(7)

yourAnswerToTheQuestion