If you know your current market value, there is no harm in providing your current salary.
As a real-world example (and a bit of an edge case used to illustrate the point clearly), if you know the typical salary for an entry-level developer in Philadelphia is 70K a year, and $NEWGRAD is currently making 35K while working during school, saying "I'm currently making 35K and looking for 70K" is entirely appropriate, as both sides are aware that is the going rate for entry-level developers in Philly. You can't offer NEWGRAD 38K and expect him/her to accept the job.
This applies to anyone, whether you are overpaid or underpaid in your market. If you have strong data on what the market will bear for your services, whether you make half of that figure or twice that figure currently has little bearing on your actual market value.
The challenge is that most people do not have that data, and it's tough to figure out for many. As much as people hate recruiters, an experienced and specialized recruiter should be pretty good at telling you what your market value is - and most should be willing to provide this info to you without any strings attached.
Based on my own recruiting practice and my tendency to allow (encourage) most of my candidates and clients to negotiate directly much more than most other recruiters, I tend to find that candidates who are the most dodgy about their expectations or history are more likely to face a more difficult negotiation from the client.
People who are honest and transparent are perhaps viewed differently by employers than those who fight the question.
I think employers appreciate a healthy negotiation as long as it is done in good faith, but I think the value of being transparent in the negotiation may outweigh any benefits of secrecy, based anecdotally of course.