There is no Sitecore out-of-box feature to achieve your requirement. You have to customize Sitecore module(s) but personally I don't recommend that.
Rather you can implement something like below, In each workflow state set the next state as empty and create an action, in action class code check whether the current user is the owner/last updated the item if yes then move the item to next state; if not display an error/alert.
namespace Test
{
public class CheckUser
{
public void Process(WorkflowPipelineArgs workflowActionArgument)
{
if(Sitecore.Context.User.Name.Equals("item owner"))
{
// Update the State to next state
}
else
{
// show an alert box
}
}
}
}
If you don't like the above option and wanted to update the Workbox then, go to folder ..\website\sitecore\shell\Applications\Workbox, Initially Default.aspx page loads when you click the Workbox, where it handles the logic to display the items to be displayed in Workbox when you check/uncheck any Workflow. You have to overwrite/implement a similar class like Sitecore.Shell.Applications.Workbox.WorkboxForm
and write your own logic to display the items from any specific workflow state. [in your case may be you can check the Created By/Updated By with the current user and ensure the item shown for that specific user].
Note - If you extent/customize workbox code then you also need to think about the review tab where user can execute the workflow steps. So same customization needs to be done here, so better avoid customizing the Workbox or Sitecore security. Rather Customize the Workflow based on your need.