If I want to build a shared assembly, does that require the overhead of signing and managing key pairs? If so, is there a best practice approach to doing so?
That depends on what you mean by shared. If by shared you mean an assembly which you put in the GAC then yes you must sign the assembly.
If by shared you just mean that you want to reference the assembly from multiple projects and each project will have its own copy of the assembly, then no, you do not need to sign the assembly.