Low-Overhead Designs For Secure Uniprocessor And Multiprocessor Architectures