Index: src/wp-includes/comment-template.php
===================================================================
--- src/wp-includes/comment-template.php	(revision 51729)
+++ src/wp-includes/comment-template.php	(working copy)
@@ -2350,17 +2350,28 @@
 		$args['format'] = current_theme_supports( 'html5', 'comment-form' ) ? 'html5' : 'xhtml';
 	}
 
-	$req      = get_option( 'require_name_email' );
-	$html_req = ( $req ? " required='required'" : '' );
-	$html5    = 'html5' === $args['format'];
+	$req   = get_option( 'require_name_email' );
+	$html5 = 'html5' === $args['format'];
 
+	// Glyph to identify required fields visually.
+	$required_glyph = ( $req ? '<span class="required" aria-hidden="true">*</span>' : '' );
+
+	// HTML required attribute.
+	$html_req = '';
+	if ( $req && $html5 ) {
+		$html_req = ' required';
+	} elseif ( $req ) {
+		// XHTML syntax
+		$html_req = ' required="required"';
+	}
+
 	$fields = array(
 		'author' => sprintf(
 			'<p class="comment-form-author">%s %s</p>',
 			sprintf(
-				'<label for="author">%s%s</label>',
+				'<label for="author">%s %s</label>',
 				__( 'Name' ),
-				( $req ? ' <span class="required">*</span>' : '' )
+				$required_glyph
 			),
 			sprintf(
 				'<input id="author" name="author" type="text" value="%s" size="30" maxlength="245"%s />',
@@ -2371,9 +2382,9 @@
 		'email'  => sprintf(
 			'<p class="comment-form-email">%s %s</p>',
 			sprintf(
-				'<label for="email">%s%s</label>',
+				'<label for="email">%s %s</label>',
 				__( 'Email' ),
-				( $req ? ' <span class="required">*</span>' : '' )
+				$required_glyph
 			),
 			sprintf(
 				'<input id="email" name="email" %s value="%s" size="30" maxlength="100" aria-describedby="email-notes"%s />',
@@ -2419,8 +2430,8 @@
 
 	$required_text = sprintf(
 		/* translators: %s: Asterisk symbol (*). */
-		' ' . __( 'Required fields are marked %s' ),
-		'<span class="required">*</span>'
+		' <span class="comment-required-message" aria-hidden="true">' . __( 'Required fields are marked %s' ) . '</span>',
+		$required_glyph
 	);
 
 	/**
@@ -2437,8 +2448,9 @@
 		'comment_field'        => sprintf(
 			'<p class="comment-form-comment">%s %s</p>',
 			sprintf(
-				'<label for="comment">%s</label>',
-				_x( 'Comment', 'noun' )
+				'<label for="comment">%s %s</label>',
+				_x( 'Comment', 'noun' ),
+				$required_glyph
 			),
 			'<textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required="required"></textarea>'
 		),
Index: src/wp-includes/comment.php
===================================================================
--- src/wp-includes/comment.php	(revision 51729)
+++ src/wp-includes/comment.php	(working copy)
@@ -3529,7 +3529,7 @@
 
 	if ( get_option( 'require_name_email' ) && ! $user->exists() ) {
 		if ( '' == $comment_author_email || '' == $comment_author ) {
-			return new WP_Error( 'require_name_email', __( '<strong>Error</strong>: Please fill the required fields (name, email).' ), 200 );
+			return new WP_Error( 'require_name_email', __( '<strong>Error</strong>: Please fill the required fields.' ), 200 );
 		} elseif ( ! is_email( $comment_author_email ) ) {
 			return new WP_Error( 'require_valid_email', __( '<strong>Error</strong>: Please enter a valid email address.' ), 200 );
 		}
