This can be achieved through the "Describe" method. (See https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/describe.htm)
I ran a describe call via the SOAP API for the object "Subscriber". It has a number of records return with a true/false value for the field "IsRequired", which should answer your question. Thanks, and happy Salesforce Marketing Clouding!
Name|DataType|IsRetrievable|IsUpdatable|IsRequired
ID|Int32|true|true|true
PartnerKey|String|true|true|false
CreatedDate|DateTime|true|true|false
Client.ID|Int32|true|true|true
Client.PartnerClientKey|String|true|true|false
EmailAddress|String|true|true|true
SubscriberKey|String|true|true|true
UnsubscribedDate|DateTime|true|true|false
Status|SubscriberStatus|true|true|true
EmailTypePreference|EmailType|true|true|true
Attributes|Attribute[]|false|true|NULL
PartnerType|String|false|true|NULL
Lists|SubscriberList[]|false|true|NULL
GlobalUnsubscribeCategory|GlobalUnsubscribeCategory|false|true|NULL
SubscriberTypeDefinition|SubscriberTypeDefinition|false|true|NULL
Addresses|SubscriberAddress[]|false|true|NULL
PrimarySMSAddress|SMSAddress|false|true|NULL
PrimarySMSPublicationStatus|SubscriberAddressStatus|false|true|NULL
PrimaryEmailAddress|EmailAddress|false|true|NULL
Locale|Locale|false|true|NULL
Client|ClientID|false|true|NULL
PartnerProperties|APIProperty[]|false|true|NULL
ModifiedDate|DateTime|false|true|NULL
ObjectID|String|false|true|NULL
CustomerKey|String|false|true|NULL
Owner|Owner|false|true|NULL
CorrelationID|String|false|true|NULL
ObjectState|String|false|true|NULL
IsPlatformObject|Boolean|false|true|NULL