The Canadiens (17-12-5), who won the first two of their three-game homestand, lost for the second time in seven games.
Montreal goalie Carey Price made 31 saves in his first opportunity to get his 300th NHL win. He was 5-0-0 in his previous six games (five starts).
"He'll get his 300th win, it's more about the team winning games here," Canadiens captain Shea Weber said. "Obviously, he's going to win. He held us in there tonight. There's no excuse for that. We're letting each other down, it's not just him. So guys have to look at each other and know that we all have to be better for each other."
Montreal went 0-for-3 on the power play and is 0-for-25 since scoring Dec. 1.
"I just think we just need to shoot the puck," Price said. "And when things go wrong, it just seems like it's a pretty simple recipe that everybody comes up with, just get the puck towards the net and just jam it in."
Nordstrom gave Boston a 1-0 lead at 2:21 of the first period when he scored off a pass from David Backes.
Cave, who intercepted Michael Chaput's pass to begin the play that led to Nordstrom's goal, made it 2-0 with 26 seconds left in the second. His first goal came in his 13th game of the season and 16th in the NHL.
Krejci made it 3-0 46 seconds into the third, and Marchand scored on the power play at 5:06 to make it 4-0.
Halak's 45th NHL shutout was his second in 10 games against his former team. He made 19 saves for the St. Louis Blues in a 3-0 win in Montreal on Jan. 10, 2012.
"I think any shutout for a goalie on the road for a team he used to play on probably means a little bit more," Bruins coach Bruce Cassidy said.