Si bien he mencionado la posibilidad de cifrar el archivo, creo que es una técnica que a menos que de más ventajas que complicaciones es una técnica que debe evitarse.
Acompaño lo dicho por escafandra: hacer que el archivo esté oculto en un directorio que el usuario no pueda meter el dedo (o le provoque miedo meter el dedo).
Tu simplementes lees el archivo como viniste haciendo en caso de existir y comprobar que no ha sido adulterado.
Por ejemplo:
if FileExist(RutaCompletaArchivo)
then ... ts.LoadFromFile(RutaCompletaArchivo)
Luego, por el tema del MD5 para no estar siendo recursivo y dando manija al tema de la "vulnerabilidad" de los archivos entonces quizá sea más seguro y adecuado guardar esto en el Registro... Es más yo guardaría en el registro lo siguiente:
1. La ruta completa y el nombre del archivo a recuperar
2. El MD5 calculado del archivo
De este modo al iniciar el sistema, se recuperarían estos dos valores. Primero compruebo de que exista el archivo, y en caso afirmativo calculo su MD5, si es igual al guardado en registro entonces se procede a su lectura y pasar los datos al TStrings. En caso de fallar alguna de estos pasos se daría un aviso informando de ello y/o abortar el proceso. Como he dicho: lee la ayuda sobre el uso de TRegistry.
Como veo que eres nuevo en esto de Delphi, para que no te compliques la vida haz esto:
1. Copia el código de la unidad Hashes
2. Ve a delphi, abre tu proyecto. Crea una unidad: File -> New -> Unit
3. Borra todo el contenido de dicha unidad y pega el código.
4. Guarda la unidad con el nombre Hashes.
5. Ve a la unidad de tu form principal (o en donde quieras y debas hacer uso de las funciones de MD5). Ubícate en la sección uses y agrega la unidad creada:
Por ejemplo:
Unit Unit1;
...
uses
bla, bla, bla, .... ,[b]Hashes[/b];
¡Listo! Ahora queda hacer uso de las funciones CheckSum y StrCheckSum en donde quieras.
Guarda y compila.
Saludos,