Women and children were among those killed in the blast at the market in Jamrud, the main town in Khyber.
The explosion took place close to the offices of the tribal administration. The injured have been taken to hospital in the nearby city of Peshawar.
No group has said it carried out the attack as yet.
The bombing comes a day after a 15-hour stand-off between militants and security forces in the vicinity of Peshawar airport, located just about 10km (six miles) east of Jamrud town.
At least 10 militants were killed in the clash, many of them ethnic Uzbek fighters, officials said. The Pakistani Taliban said they carried out that attack.