Должны ли они поступать непосредственно из хранилища материала ключей OTP или должны вводиться пользователем из памяти (с помощью пароля, а затем функции получения ключа)?
Зависит от целей безопасности. Если вас устраивает безопасность вычислительной сложности (то есть с предположением, что противник не в состоянии накопить достаточную вычислительную мощность, чтобы взломать систему), то ввод пароля из памяти — это нормально.
С другой стороны, тот факт, что вы используете OTP для конфиденциальности, может указывать на то, что ваши цели безопасности могут быть немного выше; если это так, то использование некоторых битов из одноразового блокнота имело бы смысл (и, как правило, довольно дешево, поскольку существуют информационно безопасные MAC, такие как One-Time MAC на странице, которую вы цитировали [1], что требуют фиксированного количества секретных битов на сообщение (по сравнению с «количеством секретных битов зависит от длины сообщения», которого требует конфиденциальность).
[1]: BTW: в описании, которое они дают на странице, отсутствуют некоторые детали, например, как обрабатываются начальные 0 блоков сообщений. Возможно, было бы проще взять ядро Poly1305 или GMAC (часть аутентификации GCM) и использовать биты OTP, а не выходные данные ChaCha20 или AES — в этих конструкциях проработаны детали.