It depends on the purpose of the class, but the usual answer is "neither." A utility class is likely to be called from a number of places, some that use sharing and others that don't. By not specifying a sharing model, you will assume the default behavior of whatever class calls your utility class. This is almost always the correct answer, since the calling class' security model should already be set appropriately.
There's also a minor overhead involved whenever you change a class boundary and have with sharing or without sharing specified (it updates the Apex Runtime's internal state, which takes a few milliseconds); by specifying either sharing model, you will cause extra governor limit (CPU time) to be wasted. The only time you should specify "with sharing" or "without sharing" is when you absolutely must have the utility class work in a particular model regardless of the calling context.
The most usual case when you'd want to do either would likely be "without sharing", because you need to do something and you need to guarantee the sharing model won't get in the way, like writing to a custom log object, or updating a hidden record. It's really, really unusual to need to do this, because most of the time sharing won't stop things like mere logging, but you always carefully think about adding either model to your code, because it's incredibly difficult to justify in a utility class.