Porto reached the knockout stage of the Champions League despite losing its perfect record in the competition after a disappointing encounter in the Ukrainian capital.
The Portuguese side remains top of Group A despite dropping points for the first time in the group stage, while the home side must now win both of their remaining matches to have any chance of reaching the knockout stage. Porto can secure the top spot in the group if its beats Dinamo Zagreb in matchday five, though that will depend on Paris Saint-Germain's result against Kiev on the same night.
Both teams started slowly, and the closest either side came to scoring in the opening 20 minutes came when Marco Ruben's weak effort hit Eliaquim Mangala on the arm, though the defender didn't know much about the obstruction.
Porto top scorer Jackson Martinez was the main threat for the Portuguese champions, and he almost opened the scoring when he met James Rodriguez's searching cross from the left, but his low header was acrobatically turned round the post by young goalkeeper Maksym Koval.
That chance was the catalyst for the match to open up somewhat, and Taye Taiwo tried his luck from distance for the home side, though his specualtive volley drifted wide of the post. Danilo then tested Koval with a weak effort from distance, but there was precious little talking points in an opening period where defenses dominated.
Porto began the second half much better than they had the first, and Silvestre Varela thought he had broken the deadlock as he latched onto Rodriguez's perfectly weighted through ball, but his shot across goal rolled narrowly wide.
The Ukrainian side responded to this scare and Andriy Yarmolenko tested Helton with a powerful effort from the corner of the box, though the shot was straight at the goalkeeper.
With both sides looking for the opening goal, there were chances for both sides, and Rodriguez was the next to try his luck as he shot straight at Koval after Lucho Gonzalez had worked hard to keep the ball in on the byline.
Vitor Pereira's side was almost handed a large slice of luck on the hour mark as Joao Moutinho's free kick took a big deflection off the wall and Koval was left as a spectator as the ball fell narrowly wide.
Kiev had its best chance of the night with 25 minutes remaining when Yarmolenko was put through by substitute Lukman Haruna but he shot weakly at Helton from just inside the area.